瀏覽代碼

增加利息金额字段、利息计算接口更改

liyuan 1 月之前
父節點
當前提交
df5dd738bc

+ 5 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/OrderItems.java

@@ -888,5 +888,10 @@ public class OrderItems implements Serializable {
 	 */
 	private BigDecimal interestAmount;
 
+	/**
+	 * 利息采购单价
+	 */
+	private BigDecimal interestPrice;
+
 
 }

+ 1 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderItemsMapper.xml

@@ -73,6 +73,7 @@
         <result column="product_remark" property="productRemark"/>
         <result column="parts_cost" property="partsCost"/>
         <result column="interest_amount" property="interestAmount"/>
+        <result column="interest_price" property="interestPrice"/>
     </resultMap>
 
 

+ 21 - 11
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -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());