|
@@ -57,6 +57,7 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
balance = BigDecimal.ZERO;
|
|
|
}
|
|
|
StudentPaymentOrder order = studentPaymentOrderDao.get(orderId);
|
|
|
+ BigDecimal totalActualAmount = order.getActualAmount() == null ? BigDecimal.ZERO : order.getActualAmount();
|
|
|
MusicGroup musicGroup = new MusicGroup();
|
|
|
if (StringUtils.isNotBlank(musicGroupId)) {
|
|
|
musicGroup = musicGroupDao.get(musicGroupId);
|
|
@@ -74,8 +75,14 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //已分配的商品余额
|
|
|
BigDecimal hasRouteBalance = BigDecimal.ZERO;
|
|
|
+ //已分配的商品现金
|
|
|
+ BigDecimal hasRouteActualAmount= BigDecimal.ZERO;
|
|
|
+ //商品占用的的余额
|
|
|
BigDecimal goodsTotalBalance = totalAmount.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : goodsTotalPrice.multiply(balance).divide(totalAmount, 2, BigDecimal.ROUND_DOWN);
|
|
|
+ //商品占用的总现金
|
|
|
+ BigDecimal goodsTotalActualAmount = totalAmount.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : goodsTotalPrice.multiply(totalActualAmount).divide(totalAmount, 2, BigDecimal.ROUND_DOWN);
|
|
|
AccountType accountType = sysPaymentConfigService.checkAccountType(PaymentChannelEnum.valueOf(order.getPaymentChannel()), order.getMerNos());
|
|
|
|
|
|
List<SellOrder> sellOrderList = goodsService.subtractStock(goodsIds, accountType);
|
|
@@ -91,12 +98,19 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
}
|
|
|
goodsPrice = nowGoods.getDiscountPrice();
|
|
|
|
|
|
+ //当前商品占用的总余额
|
|
|
BigDecimal goodsBalance = goodsTotalPrice.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO :
|
|
|
goodsTotalBalance.multiply(goodsPrice).divide(goodsTotalPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
+ //当前商品占用的总现金
|
|
|
+ BigDecimal goodsActualAmount = goodsTotalPrice.compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO :
|
|
|
+ goodsTotalActualAmount.multiply(goodsPrice).divide(goodsTotalPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
+
|
|
|
if (i == goodsNum) {
|
|
|
goodsBalance = goodsTotalBalance.subtract(hasRouteBalance);
|
|
|
+ goodsActualAmount = goodsTotalActualAmount.subtract(hasRouteActualAmount);
|
|
|
}
|
|
|
hasRouteBalance = hasRouteBalance.add(goodsBalance);
|
|
|
+ hasRouteActualAmount = hasRouteActualAmount.add(hasRouteActualAmount);
|
|
|
i++;
|
|
|
|
|
|
int complementGoodsNum = nowGoods.getComplementGoodsIdList() == null ? 1 : nowGoods.getComplementGoodsIdList().split(",").length;
|
|
@@ -121,21 +135,21 @@ public class SellOrderServiceImpl extends BaseServiceImpl<Integer, SellOrder> im
|
|
|
BigDecimal sellOrderActualAmount = BigDecimal.ZERO;
|
|
|
BigDecimal sellOrderBalance = BigDecimal.ZERO;
|
|
|
if (complementPrice.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- sellOrderActualAmount = complementGoodsPrice.get(sellOrder.getGoodsId()).multiply(new BigDecimal(sellOrder.getNum())).multiply(goodsPrice).divide(complementPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
+ sellOrderActualAmount = complementGoodsPrice.get(sellOrder.getGoodsId()).multiply(new BigDecimal(sellOrder.getNum())).multiply(goodsActualAmount).divide(complementPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
sellOrderBalance = complementGoodsPrice.get(sellOrder.getGoodsId()).multiply(new BigDecimal(sellOrder.getNum())).multiply(goodsBalance).divide(complementPrice, 2, BigDecimal.ROUND_DOWN);
|
|
|
}
|
|
|
|
|
|
complementGoodsNum = complementGoodsNum - sellOrder.getNum();
|
|
|
if (complementGoodsNum <= 0) {
|
|
|
- sellOrderActualAmount = goodsPrice.subtract(hasRouteSellOrderActualAmount);
|
|
|
+ sellOrderActualAmount = goodsActualAmount.subtract(hasRouteSellOrderActualAmount);
|
|
|
sellOrderBalance = goodsBalance.subtract(hasRouteSellOrderBalance);
|
|
|
}
|
|
|
hasRouteSellOrderActualAmount = hasRouteSellOrderActualAmount.add(sellOrderActualAmount);
|
|
|
hasRouteSellOrderBalance = hasRouteSellOrderBalance.add(sellOrderBalance);
|
|
|
|
|
|
- sellOrder.setExpectAmount(sellOrderActualAmount);
|
|
|
+ sellOrder.setExpectAmount(sellOrderActualAmount.add(sellOrderBalance));
|
|
|
sellOrder.setBalanceAmount(sellOrderBalance);
|
|
|
- sellOrder.setActualAmount(sellOrderActualAmount.subtract(sellOrderBalance));
|
|
|
+ sellOrder.setActualAmount(sellOrderActualAmount);
|
|
|
sellOrder.setOrganId(order.getOrganId());
|
|
|
sellOrder.setCooperationOrganId(musicGroup.getCooperationOrganId());
|
|
|
sellOrder.setTransNo(order.getTransNo());
|