提交 94b45f9e 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
......@@ -14,8 +14,10 @@ public enum OwnerLoanAccountRunningWaterRecordEnum {
@Getter
@AllArgsConstructor
public enum RunWaterType {
APPROVE_WAIT(10, "运单核销"),
APPROVE_PASS(20, "借款"),
APPROVE_WAIT(10, "借款"),
APPROVE_FROZEN(20, "冻结"),
APPROVE_CHILD_WRITE_OFF(30, "运单核销"),
APPROVE_THAW(40, "解冻"),
;
private final Integer code;
......
......@@ -37,7 +37,7 @@ public class OwnerLoanAccountVO {
@ApiModelProperty(value = "账户余额 (元) ", example = "1.23")
private BigDecimal amount;
public BigDecimal getAmount() {
return BigDecimal.ZERO.add(fundingAmount==null? BigDecimal.ZERO : fundingAmount).add(virtuallyAmount==null? BigDecimal.ZERO : virtuallyAmount);
return BigDecimal.ZERO.add(fundingAccountBalance==null? BigDecimal.ZERO : fundingAccountBalance).add(virtuallyAccountBalance==null? BigDecimal.ZERO : virtuallyAccountBalance);
}
@ApiModelProperty(value = "欠款金额 (元)", example = "1.23")
......@@ -52,13 +52,30 @@ public class OwnerLoanAccountVO {
private String createTime;
@JsonIgnore
@ApiModelProperty(value = "资金金额", example = "1.23", hidden = true)
@ApiModelProperty(value = "资金账户余额", example = "", hidden = true)
@MoneyOutConvert
private BigDecimal fundingAmount;
private BigDecimal fundingAccountBalance;
@JsonIgnore
@ApiModelProperty(value = "虚拟币金额", example = "1.23", hidden = true)
@ApiModelProperty(value = "资金可用余额", example = "", hidden = true)
@MoneyOutConvert
private BigDecimal virtuallyAmount;
private BigDecimal fundingUsableBalance;
@JsonIgnore
@ApiModelProperty(value = "资金冻结余额", example = "", hidden = true)
@MoneyOutConvert
private BigDecimal fundingFrozenBalance;
@JsonIgnore
@ApiModelProperty(value = "虚拟币账户余额", example = "", hidden = true)
@MoneyOutConvert
private BigDecimal virtuallyAccountBalance;
@JsonIgnore
@ApiModelProperty(value = "虚拟币可用余额", example = "", hidden = true)
@MoneyOutConvert
private BigDecimal virtuallyUsableBalance;
@JsonIgnore
@ApiModelProperty(value = "虚拟币冻结余额", example = "", hidden = true)
@MoneyOutConvert
private BigDecimal virtuallyFrozenBalance;
@JsonIgnore
@ApiModelProperty(value = "资金欠款", example = "1.23", hidden = true)
@MoneyOutConvert
......
package com.clx.performance.component;
import cn.hutool.json.JSONUtil;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.order.vo.pc.owner.OwnerQuotationDetailVO;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OwnerRunningWaterRecordDao;
import com.clx.performance.dao.loan.OwnerLoanAccountDao;
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.enums.OrderGoodsOverWeightEnum;
import com.clx.performance.enums.OwnerAccountEnum;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.loan.OwnerLoanAccountRunningWaterRecordEnum;
import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.enums.loan.OwnerRePaymentEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.OwnerRunningWaterRecord;
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.user.vo.feign.OwnerInfoFeignVO;
import com.msl.common.base.Optional;
import com.msl.common.exception.ServiceSystemException;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.List;
@Component
@AllArgsConstructor
@Slf4j
public class OrderChildLoanComponent {
private final OrderFeign orderFeign;
......@@ -40,26 +52,46 @@ public class OrderChildLoanComponent {
private final OwnerRepaymentDao ownerRepaymentDao;
public void getChildDetermine(FeignOrderInfoVO orderInfoVO, OwnerInfoFeignVO ownerInfoFeignVO, OrderGoods orderGoods) {
private final OwnerLoanRecordDao ownerLoanRecordDao;
private final IdGenerateSnowFlake idGenerateSnowFlake;
private final OwnerLoanAccountRunningWaterRecordDao ownerLoanAccountRunningWaterRecordDao;
/**
* 接单校验判断
* @param orderInfoVO
* @param ownerInfoFeignVO
* @param orderGoods
* @param childNo
*/
@Transactional(rollbackFor = Exception.class)
public void getChildDetermine(FeignOrderInfoVO orderInfoVO, OwnerInfoFeignVO ownerInfoFeignVO, OrderGoods orderGoods,
String childNo) {
log.info("1.接单校验判断");
OwnerQuotationDetailVO quotationDetailVO = orderFeign.getQuotationByOrderNo(orderInfoVO.getOrderNo()).getData();
BigDecimal freightFreezeRate = quotationDetailVO.getFreightFreezeRate();
if (freightFreezeRate.compareTo(BigDecimal.ONE) == 0) {
//百分百预付不需要考虑借款账户
log.info("2.百分百预付不需要考虑借款账户");
return;
}
//发货-是否可超标准 0 否 1 是
Integer overWeight = orderInfoVO.getOverWeight();
if (OrderGoodsOverWeightEnum.NO.getCode().equals(overWeight)) {
determine(orderGoods.getPendingOrderFreight().multiply(new BigDecimal(35)));
log.info("3.进行标吨判断");
determine(orderGoods.getPendingOrderFreight().multiply(new BigDecimal(35)), ownerInfoFeignVO, orderGoods.getOrderNo(), childNo);
} else {
determine(orderGoods.getPendingOrderFreight().multiply(new BigDecimal(50)));
log.info("3.进行超吨判断");
determine(orderGoods.getPendingOrderFreight().multiply(new BigDecimal(50)), ownerInfoFeignVO, orderGoods.getOrderNo(), childNo);
}
}
public void determine(BigDecimal orderChildPrice) {
List<OwnerRunningWaterRecord> runningWaterRecordList = ownerRunningWaterRecordDao.getOwnerRunningWaterRecord("");
public void determine(BigDecimal orderChildPrice, OwnerInfoFeignVO ownerInfoFeignVO, String orderNo, String childNo) {
log.info("4.预估运费{},货主{},订单号{},运单号{}", orderChildPrice, ownerInfoFeignVO.getUserNo(), orderNo, childNo);
List<OwnerRunningWaterRecord> runningWaterRecordList = ownerRunningWaterRecordDao.getOwnerRunningWaterRecord(orderNo);
BigDecimal frozen = runningWaterRecordList.stream().filter(item -> {
return item.getRunningWaterType().equals(OwnerAccountEnum.RunningWaterStatus.FROZEN.getCode())
&& item.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())
......@@ -72,30 +104,125 @@ public class OrderChildLoanComponent {
;
}).map(OwnerRunningWaterRecord::getAlterationBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal subtract = frozen.subtract(takeOut);
log.info("5.查询预付运费相关流水:订单冻结预付运费{}, 扣除流水{}", frozen, takeOut);
if (subtract.compareTo(BigDecimal.ZERO) > 0) {
//查询未结算的运单(没有产生扣除流水的运单)
List<OrderChild> orderChildList = orderChildDao.selectInTransitOrderChildLtUnsettle("");
List<OrderChild> orderChildList = orderChildDao.selectInTransitOrderChildLtUnsettle(orderNo);
BigDecimal orderChildSum = orderChildList.stream().map(OrderChild::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal ans = subtract.subtract(orderChildSum);
log.info("6.当前订单冻结的预付运费还有剩余, 查询查询未结算的运单(没有产生扣除流水的运单)总计{},账户剩余{}", orderChildSum, subtract);
if (ans.compareTo(BigDecimal.ZERO) >= 0 && ans.compareTo(orderChildPrice) >= 0) {
//预付运费够
log.info("7.预付运费足够,不限制");
return;
}
}
log.info("8.预付运费不够,开始进行借款判断");
// 进行借款判断
OwnerLoanAccount ownerLoanAccount = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo, null).get();
OwnerLoanAccount ownerLoanAccount = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo, ownerInfoFeignVO.getUserNo()).get();
BigDecimal ownerLoanAccountSum = ownerLoanAccount.getVirtuallyUsableBalance().add(ownerLoanAccount.getFundingUsableBalance());
if (ownerLoanAccountSum.compareTo(orderChildPrice) < 0) {
log.info("9.当前货主借款账户总计{},小于预估运费{}", ownerLoanAccountSum, orderChildPrice);
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL, "货主已欠款");
}
//借款账户钱够,判断是否逾期
log.info("10.借款账户钱够,判断是否逾期");
Optional<OwnerRepayment> optional = ownerRepaymentDao.getLimitOneByField(OwnerRepayment::getBeOverdue, OwnerRePaymentEnum.BeOverdue.YES.getCode());
if (optional.isPresent()) {
//逾期:不允许
log.info("11.当前货主存在逾期借款");
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL, "货主已欠款");
}
List<OwnerLoanRecord> updateList = new LinkedList<>();
//查询审批通过并且未用完的借款
List<OwnerLoanRecord> ownerLoanRecords = ownerLoanRecordDao.selectLoanBalance(ownerInfoFeignVO.getUserNo());
BigDecimal orderChildPriceTemp = orderChildPrice;
for (OwnerLoanRecord ownerLoanRecord : ownerLoanRecords) {
BigDecimal loanResidueBalance = ownerLoanRecord.getLoanResidueBalance();
log.info("12.当前预估运费金额:{},借款单号{},借款剩余金额{}", orderChildPriceTemp, ownerLoanRecord.getLoanNo(), loanResidueBalance);
if (loanResidueBalance.compareTo(orderChildPriceTemp) >= 0) {
log.info("当前借款单的剩余金额足够预估运费金额");
generateFrozenOwnerLoanRunningWater(ownerLoanRecord, childNo, orderChildPrice);
updateList.add(ownerLoanRecord.setLoanResidueBalance(loanResidueBalance.subtract(orderChildPriceTemp)));
break;
} else {
log.info("当前借款单的剩余金额不够抵扣预估运费金额,先进行扣除当前借款所有剩余");
generateFrozenOwnerLoanRunningWater(ownerLoanRecord, childNo, orderChildPrice);
updateList.add(ownerLoanRecord.setLoanResidueBalance(BigDecimal.ZERO));
orderChildPriceTemp = orderChildPriceTemp.subtract(loanResidueBalance);
}
}
for (OwnerLoanRecord update : updateList) {
ownerLoanRecordDao.updateEntityByKey(update);
}
}
//生成借款冻结流水
public void generateFrozenOwnerLoanRunningWater(OwnerLoanRecord ownerLoanRecord, String childNo, BigDecimal orderChildPrice) {
log.info("13.生成借款冻结流水");
OwnerLoanAccount update = new OwnerLoanAccount();
while (true) {
ownerLoanAccountUpdate(ownerLoanRecord, orderChildPrice, update);
Integer i = ownerLoanAccountDao.updateAccountCAS(update, LocalDateTime.now(), false);
log.info("CAS更新结果:{}", i);
if (i == 1) {
OwnerLoanAccountRunningWaterRecord waterRecord = new OwnerLoanAccountRunningWaterRecord();
waterRecord.setLoanNo(ownerLoanRecord.getLoanNo());
waterRecord.setOwnerUserName(ownerLoanRecord.getOwnerUserName());
waterRecord.setOwnerUserNo(ownerLoanRecord.getOwnerUserNo());
waterRecord.setMobile(ownerLoanRecord.getMobile());
waterRecord.setRunningWaterNo(idGenerateSnowFlake.nextId(1L));
waterRecord.setChildNo(childNo);
waterRecord.setRunningWaterType(OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode());
waterRecord.setAccountBalance(orderChildPrice);
OwnerLoanAccount account = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo,
ownerLoanRecord.getOwnerUserNo()).get();
waterRecord.setAccountBalance(account.getVirtuallyAccountBalance().add(account.getFundingAccountBalance()));
waterRecord.setUseableBalance(account.getVirtuallyUsableBalance().add(account.getFundingUsableBalance()));
waterRecord.setCreateBy("系统");
log.info("14.生成借款账户流水信息:{}", JSONUtil.parse(waterRecord));
ownerLoanAccountRunningWaterRecordDao.saveEntity(waterRecord);
break;
}
}
}
//借款账户信息更新
public void ownerLoanAccountUpdate(OwnerLoanRecord ownerLoanRecord, BigDecimal orderChildPrice, OwnerLoanAccount update) {
log.info("执行CAS前置借款账户信息赋值");
Integer loanType = ownerLoanRecord.getLoanType();
OwnerLoanAccount account = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo,
ownerLoanRecord.getOwnerUserNo()).get();
if (OwnerLoanRecordEnum.LoanType.VIRTUAL_CURRENCY.getCode().equals(loanType)) {
log.info("进行虚拟货币信息赋值");
update.setId(account.getId());
update.setModifiedTime(account.getModifiedTime());
update.setVirtuallyFrozenBalance(orderChildPrice);
update.setVirtuallyUsableBalance(orderChildPrice);
update.setVirtuallyAccountBalance(BigDecimal.ZERO);
update.setFundingAccountBalance(BigDecimal.ZERO);
update.setFundingFrozenBalance(BigDecimal.ZERO);
update.setFundingUsableBalance(BigDecimal.ZERO);
} else {
log.info("进行资金信息赋值");
update.setId(account.getId());
update.setModifiedTime(account.getModifiedTime());
update.setFundingFrozenBalance(orderChildPrice);
update.setFundingUsableBalance(orderChildPrice);
update.setFundingAccountBalance(BigDecimal.ZERO);
update.setVirtuallyFrozenBalance(BigDecimal.ZERO);
update.setVirtuallyUsableBalance(BigDecimal.ZERO);
update.setVirtuallyAccountBalance(BigDecimal.ZERO);
}
}
}
......@@ -27,8 +27,7 @@ public class OwnerLoanAccountDaoImpl extends BaseDaoImpl<OwnerLoanAccountMapper,
if (flag) {
return baseMapper.addAccount(account, nowStr);
} else {
return null;
// return baseMapper.subAccount(account, nowStr);
return baseMapper.subAccount(account, nowStr);
}
}
......
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.loan.OwnerLoanRecordDao;
import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.mapper.loan.OwnerLoanRecordMapper;
import com.clx.performance.model.loan.OwnerLoanRecord;
import com.clx.performance.param.pc.loan.carrier.PageCarrierOwnerLoanRecordParam;
......@@ -13,6 +14,7 @@ import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Objects;
/**
......@@ -53,4 +55,19 @@ public class OwnerLoanRecordDaoImpl extends BaseDaoImpl<OwnerLoanRecordMapper, O
return baseMapper.pageByParam(page,param);
}
/**
* 查询审批通过并且未用完的借款
* @param userNo
* @return
*/
@Override
public List<OwnerLoanRecord> selectLoanBalance(Long userNo) {
return baseMapper.selectList(
lQrWrapper().eq(OwnerLoanRecord::getStatus, OwnerLoanRecordEnum.Status.APPROVE_PASS.getCode())
.eq(OwnerLoanRecord::getOwnerUserNo , userNo)
.gt(OwnerLoanRecord::getLoanResidueBalance, 0)
.orderByAsc(OwnerLoanRecord::getId)
);
}
}
......@@ -8,6 +8,8 @@ import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanRecordOfOwner;
import com.clx.performance.vo.pc.loan.carrier.OwnerLoanRecordVO;
import com.msl.common.dao.BaseDao;
import java.util.List;
/**
* @author kavin
......@@ -19,4 +21,5 @@ public interface OwnerLoanRecordDao extends BaseDao<OwnerLoanRecordMapper, Owner
IPage<OwnerLoanRecordVO> pageByParam(PageOwnerLoanRecordOfOwner param);
List<OwnerLoanRecord> selectLoanBalance(Long userNo);
}
......@@ -127,6 +127,9 @@ public class OrderChildSyncTransportListener {
if (subtract.compareTo(BigDecimal.ZERO) <= 0 || ans.compareTo(BigDecimal.ZERO) == 0) {
settlementOwnerDetail.setPrepayFreight(BigDecimal.ZERO);
settlementDriverDetail.setPrepayFreightFlag(SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode());
BigDecimal settlementFreight = settlementOwnerDetail.getSettlementFreight();
//生成借款标识
} else {
if (subtract.subtract(ans).compareTo(BigDecimal.ZERO) >= 0) {
//账户扣钱并生成扣除流水
......
......@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.loan.BorrowerConfig;
import com.clx.performance.param.pc.loan.carrier.PageBorrowerConfigParam;
import com.clx.performance.sqlProvider.borrower.BorrowerConfigSqlProvider;
import com.clx.performance.sqlProvider.loan.BorrowerConfigSqlProvider;
import com.clx.performance.vo.pc.loan.carrier.BorrowerConfigVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
......
......@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.loan.Borrower;
import com.clx.performance.param.pc.loan.carrier.PageBorrowerParam;
import com.clx.performance.sqlProvider.borrower.BorrowerSqlProvider;
import com.clx.performance.sqlProvider.loan.BorrowerSqlProvider;
import com.clx.performance.vo.pc.loan.carrier.BorrowerVO;
import com.clx.performance.vo.pc.loan.owner.BorrowerSelectVO;
import org.apache.ibatis.annotations.Mapper;
......
......@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.loan.OwnerLoanAccount;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanAccountParam;
import com.clx.performance.sqlProvider.borrower.OwnerLoanAccountSqlProvider;
import com.clx.performance.sqlProvider.loan.OwnerLoanAccountSqlProvider;
import com.clx.performance.vo.pc.loan.carrier.OwnerLoanAccountVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
......@@ -25,12 +25,14 @@ public interface OwnerLoanAccountMapper extends BaseMapper<OwnerLoanAccount> {
)
Integer addAccount(@Param("account") OwnerLoanAccount account, @Param("now") String nowStr);
// @Update("update owner_account set funding_amount = funding_amount - #{account.fundingAmount}," +
// "frozen_balance = frozen_balance + #{account.frozenBalance},account_balance = account_balance - #{account.accountBalance}," +
// "modified_time=#{now}"
// + "where id = #{account.id} and modified_time = #{account.modifiedTime}"
// )
// Integer subAccount(@Param("account") OwnerAccount account, @Param("now") String now);
@Update("update owner_loan_account set funding_account_balance = funding_account_balance - #{account.fundingAccountBalance}," +
",funding_usable_balance = funding_usable_balance - #{account.fundingUsableBalance},funding_frozen_balance = funding_frozen_balance - #{account.fundingFrozenBalance}," +
",virtually_account_balance = virtually_account_balance - #{account.virtuallyAccountBalance},virtually_usable_balance = virtually_usable_balance - #{account.virtuallyUsableBalance}," +
",virtually_frozen_balance = virtually_frozen_balance - #{account.virtuallyFrozenBalance}," +
"modified_time=#{now}"
+ "where id = #{account.id} and modified_time = #{account.modifiedTime}"
)
Integer subAccount(@Param("account") OwnerLoanAccount account, @Param("now") String now);
/**
* @see OwnerLoanAccountSqlProvider#pageByParam(Page, PageOwnerLoanAccountParam)
......
......@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.loan.OwnerLoanAccountRunningWaterRecord;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanAccountWaterRecordOfOwnerParam;
import com.clx.performance.sqlProvider.borrower.OwnerLoanAccountRunningWaterRecordSqlProvider;
import com.clx.performance.sqlProvider.loan.OwnerLoanAccountRunningWaterRecordSqlProvider;
import com.clx.performance.vo.pc.loan.carrier.OwnerLoanAccountRunningWaterRecordVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
......
......@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.loan.OwnerLoanRecord;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanRecordOfOwner;
import com.clx.performance.sqlProvider.borrower.OwnerLoanRecordSqlProvider;
import com.clx.performance.sqlProvider.loan.OwnerLoanRecordSqlProvider;
import com.clx.performance.vo.pc.loan.carrier.OwnerLoanRecordVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
......
......@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.model.loan.OwnerRepayment;
import com.clx.performance.param.pc.loan.carrier.PageOwnerRepaymentOfOwner;
import com.clx.performance.sqlProvider.borrower.OwnerRepaymentSqlProvider;
import com.clx.performance.sqlProvider.loan.OwnerRepaymentSqlProvider;
import com.clx.performance.vo.pc.loan.carrier.OwnerRepaymentVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
......
......@@ -64,6 +64,10 @@ public class OwnerLoanRecord implements HasKey<Integer> {
@ApiModelProperty("借款金额")
private BigDecimal loanBalance;
@TableField("loan_residue_balance")
@ApiModelProperty("借款剩余金额")
private BigDecimal loanResidueBalance;
@TableField("borrower")
@ApiModelProperty("借款方")
private String borrower;
......
......@@ -8,6 +8,7 @@ import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderChildLoanComponent;
import com.clx.performance.constant.RedisConstants;
import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.dao.*;
......@@ -153,17 +154,7 @@ public class OrderChildServiceImpl implements OrderChildService {
private FeignPaymentService feignPaymentService;
@Autowired
private TruckService truckService;
@Autowired
private ZjxlGpsService zjxlGpsService;
@Autowired
private UserService userService;
@Autowired
private OwnerRunningWaterRecordDao ownerRunningWaterRecordDao;
private OrderChildLoanComponent orderChildLoanComponent;
@Override
public SaveOrderChildVO saveOrderChild(OrderChildSaveParam param) {
......@@ -265,7 +256,6 @@ public class OrderChildServiceImpl implements OrderChildService {
FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderGoods.getOrderNo()).orElseThrow(PerformanceResultEnum.ORDER_INVALID);
OwnerInfoFeignVO ownerInfo = ownerInfoService.getOwnerInfo(orderInfo.getOwnerUserNo());
// // 车型限制
// FeignOrderInfoVO orderInfo = orderService.getOrderInfo(orderGoods.getOrderNo()).orElseThrow
// (PerformanceResultEnum.DATA_NOT_FIND);
......@@ -312,8 +302,8 @@ public class OrderChildServiceImpl implements OrderChildService {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_WEIGHT_LACK);
}
//TODO 借款账户相关限制
//接单判断
orderChildLoanComponent.getChildDetermine(orderInfo, ownerInfo, orderGoods, childNo);
OrderChild orderChild = new OrderChild();
orderChild.setChildNo(childNo);
......
......@@ -139,12 +139,13 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
ownerLoanRecord.setLoanType(param.getLoanType());
if (OwnerLoanRecordEnum.LoanType.FUND.getCode().equals(param.getLoanType())) {
//资金 TODO 调中信银企直连的产品,从诚联信账户中给鑫祥和执行转账
//资金 TODO 调宁波银企直连的产品,从诚联信账户中给鑫祥和执行转账
NbBankOrderPayResultVO orderPayResultVO = bankService.orderDirectPay(param.getLoanNo() ,
ownerLoanRecord.getLoanBalance().intValue(), "", "", "");
ownerLoanRecord.setRunningWaterOpenNo(orderPayResultVO.getTransSeqNo());
ownerLoanRecord.setMerchantRunningWaterNo(orderPayResultVO.getMerSeqNo());
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.PAYING.getCode());
ownerLoanRecord.setLoanResidueBalance(ownerLoanRecord.getLoanBalance());
} else {
// 虚拟币 直接增加 更改状态审批通过
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.APPROVE_PASS.getCode());
......
package com.clx.performance.sqlProvider.borrower;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanAccountParam;
import com.clx.performance.vo.pc.loan.carrier.OwnerLoanAccountVO;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
import java.util.Objects;
public class OwnerLoanAccountSqlProvider {
public String pageByParam(@Param("page") Page<OwnerLoanAccountVO> page, @Param("param") PageOwnerLoanAccountParam param) {
return new SQL(){{
SELECT(" id, owner_user_no as ownerUserNo, owner_user_name as ownerUserName, mobile, " +
" account_type as accountType, funding_amount as fundingAmount, virtually_amount as virtuallyAmount, " +
" funding_arrears as fundingArrears, virtually_arrears as virtuallyArrears, " +
" 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");
if (Objects.nonNull(param.getOwnerUserNo())) {WHERE("owner_user_no = #{param.ownerUserNo}");}
if (StringUtils.isNotBlank(param.getOwnerUserName())) {WHERE("owner_user_name like CONCAT(#{param.ownerUserName},'%')");}
if (StringUtils.isNotBlank(param.getMobile())) {WHERE("mobile = #{param.mobile}");}
ORDER_BY("create_time desc");
}}.toString();
}
}
package com.clx.performance.sqlProvider.borrower;
package com.clx.performance.sqlProvider.loan;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.loan.carrier.PageBorrowerConfigParam;
......
package com.clx.performance.sqlProvider.borrower;
package com.clx.performance.sqlProvider.loan;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.enums.StatusEnum;
......
package com.clx.performance.sqlProvider.borrower;
package com.clx.performance.sqlProvider.loan;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanAccountWaterRecordOfOwnerParam;
......
package com.clx.performance.sqlProvider.loan;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanAccountParam;
import com.clx.performance.vo.pc.loan.carrier.OwnerLoanAccountVO;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
import java.util.Objects;
public class OwnerLoanAccountSqlProvider {
public String getOwnerLoanAccountByOwnerUserId(@Param("param") Long ownerUserNo) {
......@@ -23,6 +28,28 @@ public class OwnerLoanAccountSqlProvider {
return sql;
}
public String pageByParam(@Param("page") Page<OwnerLoanAccountVO> page, @Param("param") PageOwnerLoanAccountParam param) {
return new SQL(){{
SELECT(" id, owner_user_no as ownerUserNo, owner_user_name as ownerUserName, mobile, " +
" account_type as accountType, " +
" funding_account_balance as fundingAccountBalance, funding_usable_balance as fundingUsableBalance, " +
" funding_frozen_balance as fundingFrozenBalance, virtually_account_balance as virtuallyAccountBalance, " +
" virtually_usable_balance as virtuallyUsableBalance, virtually_frozen_balance as virtuallyFrozenBalance, " +
" funding_arrears as fundingArrears, virtually_arrears as virtuallyArrears, " +
" 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");
if (Objects.nonNull(param.getOwnerUserNo())) {WHERE("owner_user_no = #{param.ownerUserNo}");}
if (StringUtils.isNotBlank(param.getOwnerUserName())) {WHERE("owner_user_name like CONCAT(#{param.ownerUserName},'%')");}
if (StringUtils.isNotBlank(param.getMobile())) {WHERE("mobile = #{param.mobile}");}
ORDER_BY("create_time desc");
}}.toString();
}
}
package com.clx.performance.sqlProvider.borrower;
package com.clx.performance.sqlProvider.loan;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanRecordOfOwner;
......
package com.clx.performance.sqlProvider.borrower;
package com.clx.performance.sqlProvider.loan;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.param.pc.loan.carrier.PageOwnerRepaymentOfOwner;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论