|
|
@@ -406,6 +406,7 @@ public class VoyageApiImpl implements VoyageApi {
|
|
|
}
|
|
|
//判断航次房型楼层库存是否充足
|
|
|
// 判断库存是否充足
|
|
|
+
|
|
|
stockDetailList.forEach(item -> {
|
|
|
BigDecimal detailShareNum = item.getShareNum();
|
|
|
BigDecimal useNum = roomModelFloorNumMap.get(item.getRoomModelId() + "_" + item.getFloor());
|
|
|
@@ -418,6 +419,12 @@ public class VoyageApiImpl implements VoyageApi {
|
|
|
}
|
|
|
});
|
|
|
// 库存充足,扣库存详情
|
|
|
+ //超卖库存
|
|
|
+ List<BigDecimal> overSoldNum = new ArrayList<>();
|
|
|
+ //使用的实际库存
|
|
|
+ List<BigDecimal> useRealNum = new ArrayList<>();
|
|
|
+ //使用的虚拟库存
|
|
|
+ List<BigDecimal> useVirtualNum = new ArrayList<>();
|
|
|
stockDetailList.forEach(item -> {
|
|
|
BigDecimal useNum = roomModelFloorNumMap.get(item.getRoomModelId() + "_" + item.getFloor());
|
|
|
if (useNum == null) {
|
|
|
@@ -442,10 +449,16 @@ public class VoyageApiImpl implements VoyageApi {
|
|
|
item.setShareNum(item.getShareNum().subtract(useNum));
|
|
|
// 减实际房间数,此处确定,先扣实际库存,实际库存不足再扣细虚拟库存
|
|
|
if (item.getRealTotalNum().compareTo(useNum) >= 0) {
|
|
|
+ useVirtualNum.add(useNum);
|
|
|
voyageStockDetailLogDO.setVirtualNum(BigDecimal.ZERO);
|
|
|
voyageStockDetailLogDO.setRealNum(useNum);
|
|
|
item.setRealTotalNum(item.getRealTotalNum().subtract(useNum));
|
|
|
} else {
|
|
|
+ useRealNum.add(item.getRealTotalNum().add(BigDecimal.ZERO));
|
|
|
+ useVirtualNum.add(useNum.subtract(item.getRealTotalNum()));
|
|
|
+ overSoldNum.add(useNum.subtract(item.getRealTotalNum()));
|
|
|
+ // 加超卖房间数
|
|
|
+ item.setOversoldNum(item.getOversoldNum().add(useNum.subtract(item.getRealTotalNum())));
|
|
|
voyageStockDetailLogDO.setVirtualNum(useNum.subtract(item.getRealTotalNum()));
|
|
|
voyageStockDetailLogDO.setRealNum(useNum);
|
|
|
// 扣实际房间数
|
|
|
@@ -469,17 +482,28 @@ public class VoyageApiImpl implements VoyageApi {
|
|
|
// 减可售房间数
|
|
|
stockDO.setCanSellNum(stockDO.getCanSellNum().subtract(totalUseNum));
|
|
|
// 减实际房间数,此处确定,先扣实际库存,实际库存不足再扣虚拟库存
|
|
|
- if (stockDO.getRealTotalNum().compareTo(totalUseNum) >= 0) {
|
|
|
- stockDO.setRealTotalNum(stockDO.getRealTotalNum().subtract(totalUseNum));
|
|
|
- voyageStockLogDO.setVirtualNum(BigDecimal.ZERO);
|
|
|
- voyageStockLogDO.setRealNum(totalUseNum);
|
|
|
- } else {
|
|
|
- voyageStockLogDO.setRealNum(stockDO.getRealTotalNum());
|
|
|
- voyageStockLogDO.setVirtualNum(totalUseNum.subtract(voyageStockLogDO.getRealNum()));
|
|
|
- // 扣虚拟房间数
|
|
|
- stockDO.setVirtualNum(stockDO.getVirtualNum().subtract(totalUseNum.subtract(stockDO.getRealTotalNum())));
|
|
|
- stockDO.setRealTotalNum(BigDecimal.ZERO);
|
|
|
- }
|
|
|
+// if (stockDO.getRealTotalNum().compareTo(totalUseNum) >= 0) {
|
|
|
+// stockDO.setRealTotalNum(stockDO.getRealTotalNum().subtract(totalUseNum));
|
|
|
+// voyageStockLogDO.setVirtualNum(BigDecimal.ZERO);
|
|
|
+// voyageStockLogDO.setRealNum(totalUseNum);
|
|
|
+// } else {
|
|
|
+// voyageStockLogDO.setRealNum(stockDO.getRealTotalNum());
|
|
|
+// voyageStockLogDO.setVirtualNum(totalUseNum.subtract(voyageStockLogDO.getRealNum()));
|
|
|
+// // 扣虚拟房间数
|
|
|
+// stockDO.setVirtualNum(stockDO.getVirtualNum().subtract(totalUseNum.subtract(stockDO.getRealTotalNum())));
|
|
|
+// stockDO.setRealTotalNum(BigDecimal.ZERO);
|
|
|
+// }
|
|
|
+ //减虚拟库存
|
|
|
+ BigDecimal totalUseVirtualNum = useVirtualNum.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ stockDO.setVirtualNum(stockDO.getVirtualNum().subtract(totalUseVirtualNum));
|
|
|
+ voyageStockLogDO.setVirtualNum(totalUseVirtualNum);
|
|
|
+ // 减实际库存
|
|
|
+ BigDecimal totalUseRealNum = useRealNum.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ stockDO.setRealTotalNum(stockDO.getRealTotalNum().subtract(totalUseRealNum));
|
|
|
+ voyageStockLogDO.setRealNum(totalUseRealNum);
|
|
|
+ //加超卖房间数
|
|
|
+ BigDecimal totalOverSoldNum = overSoldNum.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ stockDO.setOversoldNum(stockDO.getOversoldNum().add(totalOverSoldNum));
|
|
|
// 加预定房间数
|
|
|
stockDO.setBookNum(stockDO.getBookNum().add(totalUseNum));
|
|
|
// 扣共享库存
|
|
|
@@ -525,6 +549,12 @@ public class VoyageApiImpl implements VoyageApi {
|
|
|
voyageStockDistributeNewMapper.updateBatch(list);
|
|
|
|
|
|
// 库存充足,扣库存详情
|
|
|
+ //超卖库存
|
|
|
+ List<BigDecimal> overSoldNum = new ArrayList<>();
|
|
|
+ //使用的实际库存
|
|
|
+ List<BigDecimal> useRealNum = new ArrayList<>();
|
|
|
+ //使用的虚拟库存
|
|
|
+ List<BigDecimal> useVirtualNum = new ArrayList<>();
|
|
|
stockDetailList.forEach(item -> {
|
|
|
BigDecimal useNum = roomModelFloorNumMap.get(item.getRoomModelId() + "_" + item.getFloor());
|
|
|
if (useNum == null) {
|
|
|
@@ -548,15 +578,20 @@ public class VoyageApiImpl implements VoyageApi {
|
|
|
item.setCanSellNum(item.getCanSellNum().subtract(useNum));
|
|
|
// 减实际房间数,此处确定,先扣实际库存,实际库存不足再扣虚拟库存
|
|
|
if (item.getRealTotalNum().compareTo(useNum) >= 0) {
|
|
|
+ useRealNum.add(useNum);
|
|
|
voyageStockDetailLogDO.setRealNum(useNum);
|
|
|
voyageStockDetailLogDO.setVirtualNum(BigDecimal.ZERO);
|
|
|
item.setRealTotalNum(item.getRealTotalNum().subtract(useNum));
|
|
|
} else {
|
|
|
+ useVirtualNum.add(totalUseNum.subtract(item.getRealTotalNum()));
|
|
|
+ useRealNum.add(item.getRealTotalNum().add(BigDecimal.ZERO));
|
|
|
+ overSoldNum.add(totalUseNum.subtract(item.getRealTotalNum()));
|
|
|
voyageStockDetailLogDO.setRealNum(item.getRealTotalNum());
|
|
|
voyageStockDetailLogDO.setVirtualNum(totalUseNum.subtract(item.getRealTotalNum()));
|
|
|
- item.setRealTotalNum(BigDecimal.ZERO);
|
|
|
// 扣虚拟房间数
|
|
|
item.setVirtualNum(item.getVirtualNum().subtract(useNum.subtract(item.getRealTotalNum())));
|
|
|
+ item.setRealTotalNum(BigDecimal.ZERO);
|
|
|
+
|
|
|
}
|
|
|
// 加预定房间数
|
|
|
if (item.getBookNum() != null) {
|
|
|
@@ -576,17 +611,28 @@ public class VoyageApiImpl implements VoyageApi {
|
|
|
// 减剩余房间数
|
|
|
// stockDO.setSurplusNum(stockDO.getSurplusNum().subtract(totalUseNum));
|
|
|
// 减实际房间数,此处确定,先扣实际库存,实际库存不足再扣虚拟库存
|
|
|
- if (stockDO.getRealTotalNum().compareTo(totalUseNum) >= 0) {
|
|
|
- stockDO.setRealTotalNum(stockDO.getRealTotalNum().subtract(totalUseNum));
|
|
|
- voyageStockLogDO.setRealNum(totalUseNum);
|
|
|
- voyageStockLogDO.setVirtualNum(BigDecimal.ZERO);
|
|
|
- } else {
|
|
|
- voyageStockLogDO.setRealNum(stockDO.getRealTotalNum());
|
|
|
- voyageStockLogDO.setVirtualNum(totalUseNum.subtract(voyageStockLogDO.getRealNum()));
|
|
|
- stockDO.setRealTotalNum(BigDecimal.ZERO);
|
|
|
- // 扣虚拟房间数
|
|
|
- stockDO.setVirtualNum(stockDO.getVirtualNum().subtract(totalUseNum.subtract(stockDO.getRealTotalNum())));
|
|
|
- }
|
|
|
+// if (stockDO.getRealTotalNum().compareTo(totalUseNum) >= 0) {
|
|
|
+// stockDO.setRealTotalNum(stockDO.getRealTotalNum().subtract(totalUseNum));
|
|
|
+// voyageStockLogDO.setRealNum(totalUseNum);
|
|
|
+// voyageStockLogDO.setVirtualNum(BigDecimal.ZERO);
|
|
|
+// } else {
|
|
|
+// voyageStockLogDO.setRealNum(stockDO.getRealTotalNum());
|
|
|
+// voyageStockLogDO.setVirtualNum(totalUseNum.subtract(voyageStockLogDO.getRealNum()));
|
|
|
+// stockDO.setRealTotalNum(BigDecimal.ZERO);
|
|
|
+// // 扣虚拟房间数
|
|
|
+// stockDO.setVirtualNum(stockDO.getVirtualNum().subtract(totalUseNum.subtract(stockDO.getRealTotalNum())));
|
|
|
+// }
|
|
|
+ //减实际库存
|
|
|
+ BigDecimal totalUseRealNum = useRealNum.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ stockDO.setRealTotalNum(stockDO.getRealTotalNum().subtract(totalUseRealNum));
|
|
|
+ voyageStockLogDO.setRealNum(totalUseRealNum);
|
|
|
+ //减虚拟库存
|
|
|
+ BigDecimal totalUseVirtualNum = useVirtualNum.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ stockDO.setVirtualNum(stockDO.getVirtualNum().subtract(totalUseVirtualNum));
|
|
|
+ voyageStockLogDO.setVirtualNum(totalUseVirtualNum);
|
|
|
+ //加超卖数量
|
|
|
+ BigDecimal totalOverSoldNum = overSoldNum.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ stockDO.setOversoldNum(stockDO.getOversoldNum().add(totalOverSoldNum));
|
|
|
// 加预定房间数
|
|
|
stockDO.setBookNum(stockDO.getBookNum().add(totalUseNum));
|
|
|
// 扣共享库存,此处为分销商库存,不扣共享库存
|
|
|
@@ -816,6 +862,10 @@ public class VoyageApiImpl implements VoyageApi {
|
|
|
}
|
|
|
//判断航次房型楼层库存是否充足
|
|
|
// 判断库存是否充足
|
|
|
+ //使用的实际库存
|
|
|
+ List<BigDecimal> useRealNum = new ArrayList<>();
|
|
|
+ //使用的虚拟库存
|
|
|
+ List<BigDecimal> useVirtualNum = new ArrayList<>();
|
|
|
stockDetailList.forEach(item -> {
|
|
|
//这个地方使用共享库存,不使用可销售数
|
|
|
// BigDecimal canSellNum = item.getCanSellNum();
|
|
|
@@ -857,15 +907,19 @@ public class VoyageApiImpl implements VoyageApi {
|
|
|
item.setShareNum(item.getShareNum().subtract(useNum));
|
|
|
// 减虚拟房间数,此处初定,先扣虚拟库存,虚拟库存不足再扣实际库存
|
|
|
if (item.getVirtualNum().compareTo(useNum) >= 0) {
|
|
|
+ useVirtualNum.add(useNum);
|
|
|
voyageStockDetailLogDO.setVirtualNum(useNum);
|
|
|
voyageStockDetailLogDO.setRealNum(BigDecimal.ZERO);
|
|
|
item.setVirtualNum(item.getVirtualNum().subtract(useNum));
|
|
|
} else {
|
|
|
+ useRealNum.add(useNum.subtract(item.getVirtualNum()));
|
|
|
+ useVirtualNum.add(item.getVirtualNum().add(BigDecimal.ZERO));
|
|
|
voyageStockDetailLogDO.setVirtualNum(item.getVirtualNum());
|
|
|
voyageStockDetailLogDO.setRealNum(useNum.subtract(item.getVirtualNum()));
|
|
|
// 扣实际房间数
|
|
|
item.setRealTotalNum(item.getRealTotalNum().subtract(useNum.subtract(item.getVirtualNum())));
|
|
|
item.setVirtualNum(BigDecimal.ZERO);
|
|
|
+
|
|
|
}
|
|
|
// 加预定房间数
|
|
|
if (item.getBookNum() != null) {
|
|
|
@@ -883,17 +937,25 @@ public class VoyageApiImpl implements VoyageApi {
|
|
|
// 减可售房间数
|
|
|
stockDO.setCanSellNum(stockDO.getCanSellNum().subtract(totalUseNum));
|
|
|
// 减虚拟房间数,此处初定,先扣虚拟库存,虚拟库存不足再扣实际库存
|
|
|
- if (stockDO.getVirtualNum().compareTo(totalUseNum) >= 0) {
|
|
|
- stockDO.setVirtualNum(stockDO.getVirtualNum().subtract(totalUseNum));
|
|
|
- voyageStockLogDO.setVirtualNum(totalUseNum);
|
|
|
- voyageStockLogDO.setRealNum(BigDecimal.ZERO);
|
|
|
- } else {
|
|
|
- voyageStockLogDO.setVirtualNum(stockDO.getVirtualNum());
|
|
|
- voyageStockLogDO.setRealNum(totalUseNum.subtract(voyageStockLogDO.getVirtualNum()));
|
|
|
- // 扣实际房间数
|
|
|
- stockDO.setRealTotalNum(stockDO.getRealTotalNum().subtract(totalUseNum.subtract(stockDO.getVirtualNum())));
|
|
|
- stockDO.setVirtualNum(BigDecimal.ZERO);
|
|
|
- }
|
|
|
+ //减实际库存
|
|
|
+ BigDecimal totalUseRealNum = useRealNum.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ stockDO.setRealTotalNum(stockDO.getRealTotalNum().subtract(totalUseRealNum));
|
|
|
+ voyageStockLogDO.setRealNum(totalUseRealNum);
|
|
|
+ // 减虚拟库存
|
|
|
+ BigDecimal totalUseVirtualNum = useVirtualNum.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ stockDO.setVirtualNum(stockDO.getVirtualNum().subtract(totalUseVirtualNum));
|
|
|
+ voyageStockLogDO.setVirtualNum(totalUseVirtualNum);
|
|
|
+// if (stockDO.getVirtualNum().compareTo(totalUseNum) >= 0) {
|
|
|
+// stockDO.setVirtualNum(stockDO.getVirtualNum().subtract(totalUseNum));
|
|
|
+// voyageStockLogDO.setVirtualNum(totalUseNum);
|
|
|
+// voyageStockLogDO.setRealNum(BigDecimal.ZERO);
|
|
|
+// } else {
|
|
|
+// voyageStockLogDO.setVirtualNum(stockDO.getVirtualNum());
|
|
|
+// voyageStockLogDO.setRealNum(totalUseNum.subtract(voyageStockLogDO.getVirtualNum()));
|
|
|
+// // 扣实际房间数
|
|
|
+// stockDO.setRealTotalNum(stockDO.getRealTotalNum().subtract(totalUseNum.subtract(stockDO.getVirtualNum())));
|
|
|
+// stockDO.setVirtualNum(BigDecimal.ZERO);
|
|
|
+// }
|
|
|
// 加预定房间数
|
|
|
stockDO.setBookNum(stockDO.getBookNum().add(totalUseNum));
|
|
|
// 扣共享库存
|
|
|
@@ -938,6 +1000,10 @@ public class VoyageApiImpl implements VoyageApi {
|
|
|
voyageStockDistributeNewMapper.updateBatch(list);
|
|
|
|
|
|
// 库存充足,扣库存详情
|
|
|
+ //使用的实际库存
|
|
|
+ List<BigDecimal> useRealNum = new ArrayList<>();
|
|
|
+ //使用的虚拟库存
|
|
|
+ List<BigDecimal> useVirtualNum = new ArrayList<>();
|
|
|
stockDetailList.forEach(item -> {
|
|
|
BigDecimal useNum = roomModelFloorNumMap.get(item.getRoomModelId() + "_" + item.getFloor());
|
|
|
if (useNum == null) {
|
|
|
@@ -962,15 +1028,18 @@ public class VoyageApiImpl implements VoyageApi {
|
|
|
item.setCanSellNum(item.getCanSellNum().subtract(useNum));
|
|
|
// 减虚拟房间数,此处初定,先扣虚拟库存,虚拟库存不足再扣实际库存
|
|
|
if (item.getVirtualNum().compareTo(useNum) >= 0) {
|
|
|
+ useVirtualNum.add(useNum);
|
|
|
voyageStockDetailLogDO.setVirtualNum(useNum);
|
|
|
voyageStockDetailLogDO.setRealNum(BigDecimal.ZERO);
|
|
|
item.setVirtualNum(item.getVirtualNum().subtract(useNum));
|
|
|
} else {
|
|
|
+ useRealNum.add(useNum.subtract(item.getVirtualNum()));
|
|
|
+ useVirtualNum.add(item.getVirtualNum().add(BigDecimal.ZERO));
|
|
|
voyageStockDetailLogDO.setVirtualNum(item.getVirtualNum());
|
|
|
voyageStockDetailLogDO.setRealNum(totalUseNum.subtract(item.getVirtualNum()));
|
|
|
- item.setVirtualNum(BigDecimal.ZERO);
|
|
|
// 扣实际房间数
|
|
|
item.setRealTotalNum(item.getRealTotalNum().subtract(useNum.subtract(item.getVirtualNum())));
|
|
|
+ item.setVirtualNum(BigDecimal.ZERO);
|
|
|
}
|
|
|
// 加预定房间数
|
|
|
if (item.getBookNum() != null) {
|
|
|
@@ -990,17 +1059,25 @@ public class VoyageApiImpl implements VoyageApi {
|
|
|
// 减剩余房间数
|
|
|
// stockDO.setSurplusNum(stockDO.getSurplusNum().subtract(totalUseNum));
|
|
|
// 减虚拟房间数,此处初定,先扣虚拟库存,虚拟库存不足再扣实际库存
|
|
|
- if (stockDO.getVirtualNum().compareTo(totalUseNum) >= 0) {
|
|
|
- stockDO.setVirtualNum(stockDO.getVirtualNum().subtract(totalUseNum));
|
|
|
- voyageStockLogDO.setVirtualNum(totalUseNum);
|
|
|
- voyageStockLogDO.setRealNum(BigDecimal.ZERO);
|
|
|
- } else {
|
|
|
- voyageStockLogDO.setVirtualNum(stockDO.getVirtualNum());
|
|
|
- voyageStockLogDO.setRealNum(totalUseNum.subtract(voyageStockLogDO.getVirtualNum()));
|
|
|
- stockDO.setVirtualNum(BigDecimal.ZERO);
|
|
|
- // 扣实际房间数
|
|
|
- stockDO.setRealTotalNum(stockDO.getRealTotalNum().subtract(totalUseNum.subtract(stockDO.getVirtualNum())));
|
|
|
- }
|
|
|
+ //减实际库存
|
|
|
+ BigDecimal totalUseRealNum = useRealNum.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ stockDO.setRealTotalNum(stockDO.getRealTotalNum().subtract(totalUseRealNum));
|
|
|
+ voyageStockLogDO.setRealNum(totalUseRealNum);
|
|
|
+ // 减虚拟库存
|
|
|
+ BigDecimal totalUseVirtualNum = useVirtualNum.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ stockDO.setVirtualNum(stockDO.getVirtualNum().subtract(totalUseVirtualNum));
|
|
|
+ voyageStockLogDO.setVirtualNum(totalUseVirtualNum);
|
|
|
+// if (stockDO.getVirtualNum().compareTo(totalUseNum) >= 0) {
|
|
|
+// stockDO.setVirtualNum(stockDO.getVirtualNum().subtract(totalUseNum));
|
|
|
+// voyageStockLogDO.setVirtualNum(totalUseNum);
|
|
|
+// voyageStockLogDO.setRealNum(BigDecimal.ZERO);
|
|
|
+// } else {
|
|
|
+// voyageStockLogDO.setVirtualNum(stockDO.getVirtualNum());
|
|
|
+// voyageStockLogDO.setRealNum(totalUseNum.subtract(voyageStockLogDO.getVirtualNum()));
|
|
|
+// stockDO.setVirtualNum(BigDecimal.ZERO);
|
|
|
+// // 扣实际房间数
|
|
|
+// stockDO.setRealTotalNum(stockDO.getRealTotalNum().subtract(totalUseNum.subtract(stockDO.getVirtualNum())));
|
|
|
+// }
|
|
|
// 加预定房间数
|
|
|
stockDO.setBookNum(stockDO.getBookNum().add(totalUseNum));
|
|
|
// 扣共享库存,此处为分销商库存,不扣共享库存
|