提交 1a86a7b8 authored 作者: huyufan's avatar huyufan

结算单锁定

上级 b4205940
......@@ -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 {
......
......@@ -217,7 +217,7 @@ public class OrderChildLoanComponent {
log.info("3.当前是网运单,但预付运费不为0,说明已经处理");
return;
}
Integer loanTypeFlag = null;
String childNo = settlementDriverDetail.getChildNo();
List<OwnerLoanAccountRunningWaterRecord> runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByChildNoAndRunningWaterType(childNo);
......@@ -239,6 +239,7 @@ public class OrderChildLoanComponent {
runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByChildNoAndRunningWaterType
(childNo, OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode());
loanTypeFlag = loanFlagTypeProcess(runningWaterRecordList);
childWriteOffOwnerLoanAccount(runningWaterRecordList);
......@@ -248,6 +249,7 @@ public class OrderChildLoanComponent {
log.info("4.2 相等直接生成运单核销");
//相等直接生成运单核销
childWriteOffOwnerLoanAccount(runningWaterRecordList);
loanTypeFlag = loanFlagTypeProcess(runningWaterRecordList);
} else if (alterationBalance.compareTo(settlementOwnerDetail.getSettlementFreight()) > 0) {
//大于,则生成核销后,释放冻结的借款
......@@ -288,6 +290,8 @@ public class OrderChildLoanComponent {
//核销扣除
childWriteOffOwnerLoanAccount(frozenList);
loanTypeFlag = loanFlagTypeProcess(frozenList);
if (CollectionUtil.isNotEmpty(thawList)) {
OwnerLoanAccountRunningWaterRecord entity = runningWaterRecordList.get(0);
Long loanNo = entity.getLoanNo();
......@@ -314,12 +318,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 +498,18 @@ 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));
if (listMap.get(OwnerLoanRecordEnum.LoanType.VIRTUAL_CURRENCY.getCode()).size() > 1
&& listMap.get(OwnerLoanRecordEnum.LoanType.FUND.getCode()).size() > 1
) {
return OwnerLoanRecordEnum.LoanTypeFlag.V_F.getCode();
} else if (listMap.get(OwnerLoanRecordEnum.LoanType.VIRTUAL_CURRENCY.getCode()).size() > 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);
......
......@@ -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,7 +98,20 @@ 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")
);
}
......
......@@ -35,4 +35,6 @@ public interface SettlementDriverDetailDao extends BaseDao<SettlementDriverDetai
void updateLoanFlagByChildNoList(List<String> childNoList);
SettlementDriverDetail selectLoanFlag(String orderNo);
SettlementDriverDetail selectLoanTypeFlag(String orderNo);
}
......@@ -174,7 +174,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);
}
}
......
......@@ -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; //状态
......
......@@ -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,33 @@ 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);
if (CollectionUtil.isNotEmpty(orderChildren)) {
orderChildrenFlag = true;
} else {
List<SettlementOwnerDetail> ownerDetails = settlementOwnerDetailDao.selectListByOrderNo(orderNo);
if (CollectionUtil.isNotEmpty(ownerDetails)) {
ownerDetailsFlag = true;
} else {
//开票标识“网运单”,预付标识“未预付”,借款标识”未借款“的车主计费,如存在不允许锁定
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.selectLoanFlag(orderNo);
if (settlementDriverDetail != null) {
loanFlag = true;
} else {
//开票标识“网运单”,预付标识“未预付”,借款类型“虚拟货币”,借款标识”已借款“的车主计费,如存在不允许锁定
settlementDriverDetail = settlementDriverDetailDao.selectLoanTypeFlag(orderNo);
if (settlementDriverDetail != null) {
loanFlag = true;
}
}
if (CollectionUtil.isNotEmpty(orderChildren)) {
orderChildrenFlag = true;
}
}
if (ownerDetailsFlag || orderChildrenFlag) {
if (ownerDetailsFlag || orderChildrenFlag || loanFlag) {
return true;
} else {
return false;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论