|
|
@@ -8368,30 +8368,40 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
if (CollectionUtils.isEmpty(orderItemsList)) {
|
|
|
return R.fail("缺少订单明细数据,请查看订单");
|
|
|
}
|
|
|
+ BigDecimal purchaseAmount = orderItemsList.stream().map(e -> e.getPurchaseAmount().multiply(e.getOrderQuantity())).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
// 配资比例
|
|
|
BigDecimal proportion = order.getFundingRatio().divide(BigDecimal.valueOf(100), NumberEnum.SIX.number, RoundingMode.DOWN);
|
|
|
BigDecimal daysInterestRate = order.getInterestRate().divide(BigDecimal.valueOf(100), NumberEnum.TWO.number, RoundingMode.DOWN).divide(BigDecimal.valueOf(365) ,NumberEnum.TEN.number, RoundingMode.DOWN);
|
|
|
- BigDecimal interestAmount = order.getOrderAmount().multiply(proportion).multiply(daysInterestRate).multiply(BigDecimal.valueOf(order.getDays())).setScale(2, RoundingMode.DOWN);
|
|
|
+ BigDecimal interestAmount = purchaseAmount.multiply(proportion).multiply(daysInterestRate).multiply(BigDecimal.valueOf(order.getDays())).setScale(0, RoundingMode.HALF_UP);
|
|
|
order.setInterestAmount(interestAmount);
|
|
|
- int size = orderItemsList.size();
|
|
|
+
|
|
|
// 除最后一条外前面的利息金额都是整数
|
|
|
- BigDecimal perAmount = interestAmount.divide(BigDecimal.valueOf(size), 0, RoundingMode.DOWN);
|
|
|
- for (int i = 0; i < size - 1; i++) {
|
|
|
- orderItemsList.get(i).setInterestAmount(perAmount);
|
|
|
- }
|
|
|
- int lastSize = size - NumberEnum.ONE.number;
|
|
|
- BigDecimal allocated = perAmount.multiply(BigDecimal.valueOf(lastSize));
|
|
|
- BigDecimal lastAmount = interestAmount.subtract(allocated);
|
|
|
- orderItemsList.get(lastSize).setInterestAmount(lastAmount);
|
|
|
+ // 利息除以总金额得出默认比例
|
|
|
+ BigDecimal perAmount = interestAmount.divide(purchaseAmount, 8, RoundingMode.DOWN);
|
|
|
OrderItems updateItems = new OrderItems();
|
|
|
Date now = new Date();
|
|
|
+ int num = 0;
|
|
|
+ int size = orderItemsList.size() - 1;
|
|
|
+ BigDecimal sum = BigDecimal.ZERO;
|
|
|
for (OrderItems orderItems : orderItemsList) {
|
|
|
- updateItems.setInterestAmount(orderItems.getInterestAmount().divide(orderItems.getOrderQuantity(), RoundingMode.DOWN).setScale(2, RoundingMode.DOWN).add(orderItems.getPurchaseAmount()));
|
|
|
+ if (num == size) {
|
|
|
+ // 最后一条
|
|
|
+ BigDecimal lastInterestAmount = interestAmount.subtract(sum);
|
|
|
+ updateItems.setInterestPrice(lastInterestAmount.divide(orderItems.getOrderQuantity(), 2, RoundingMode.HALF_UP).add(orderItems.getPurchaseAmount()));
|
|
|
+ updateItems.setInterestAmount(updateItems.getInterestPrice().multiply(orderItems.getOrderQuantity()));
|
|
|
+ updateItems.setRemarks("采购总金额:" + purchaseAmount + "总利息:" + interestAmount + " 分摊后利息:" + sum + "余下:" + lastInterestAmount + "元 追加到此行");
|
|
|
+ } else {
|
|
|
+ BigDecimal itemInterestAmount = orderItems.getPurchaseAmount().multiply(perAmount).setScale(0, RoundingMode.HALF_UP);
|
|
|
+ updateItems.setInterestPrice(itemInterestAmount.add(orderItems.getPurchaseAmount()));
|
|
|
+ updateItems.setInterestAmount(updateItems.getInterestPrice().multiply(orderItems.getOrderQuantity()));
|
|
|
+ sum = sum.add(itemInterestAmount.multiply(orderItems.getOrderQuantity()));
|
|
|
+ }
|
|
|
updateItems.setId(orderItems.getId());
|
|
|
updateItems.setUpdateTime(now);
|
|
|
updateItems.setUpdateUser(user.getUserId());
|
|
|
// updateItems.setVersion(orderItems.getVersion() + 1);
|
|
|
orderItemsMapper.updateById(updateItems);
|
|
|
+ num++;
|
|
|
}
|
|
|
Order updateOrder = new Order();
|
|
|
updateOrder.setId(order.getId());
|