Просмотр исходного кода

配资合同利息计算接口

liyuan 1 месяц назад
Родитель
Сommit
34ca8e40cc

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

@@ -1512,6 +1512,43 @@ public class Order implements Serializable {
 	@ApiModelProperty(value = "品牌")
 	private String brand;
 
+	/**
+	 * 资方id
+	 */
+	private Long investor;
+
+	/**
+	 * 资方名称
+	 */
+	private String investorName;
+
+	/**
+	 * 利率
+	 */
+	private BigDecimal interestRate;
+
+	/**
+	 * 天数
+	 */
+	private Integer days;
+
+	/**
+	 * 利息金额
+	 */
+	private BigDecimal interestAmount;
+
+	/**
+	 * 多多配资比例
+	 */
+	private BigDecimal fundingRatio;
+
+	/**
+	 * 税率
+	 */
+	private BigDecimal taxRate;
+
+
+
 	public String get$buyerId() {
 		return $buyerId;
 	}

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

@@ -883,6 +883,10 @@ public class OrderItems implements Serializable {
 	@TableField(exist = false)
 	private String removeDuplicateFields;
 
+	/**
+	 * 利息金额
+	 */
+	private BigDecimal interestAmount;
 
 
 }

+ 1 - 1
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java

@@ -128,7 +128,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public R submit(CorpsDesc corpsDesc) {
 		Long userId = SecureUtil.getUserId();
 		Date date = new Date();

+ 7 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderController.java

@@ -1182,4 +1182,11 @@ public class OrderController extends BladeController {
 		return orderService.generateBills(ids, billId);
 	}
 
+
+	@PostMapping("calculateInterestAmount")
+	public R calculateInterestAmount(@RequestBody Order order) {
+		return orderService.calculateInterestAmount(order);
+	}
+
+
 }

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

@@ -72,6 +72,7 @@
         <result column="purchase_cost" property="purchaseCost"/>
         <result column="product_remark" property="productRemark"/>
         <result column="parts_cost" property="partsCost"/>
+        <result column="interest_amount" property="interestAmount"/>
     </resultMap>
 
 

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

@@ -112,6 +112,13 @@
         <result column="generate" property="generate"/>
         <result column="storage_quantity_pj" property="storageQuantityPj"/>
         <result column="purchase_quantity_pj" property="purchaseQuantityPj"/>
+        <result column="investor"        property="investor"/>
+        <result column="investor_name"   property="investorName"/>
+        <result column="interest_rate"   property="interestRate"/>
+        <result column="days"            property="days"/>
+        <result column="interest_amount" property="interestAmount"/>
+        <result column="funding_ratio" property="fundingRatio"/>
+        <result column="tax_rate" property="taxRate"/>
     </resultMap>
 
 

+ 8 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java

@@ -548,4 +548,12 @@ public interface IOrderService extends IService<Order> {
 	R generateBills(String ids,String billId);
 
 	R checkAgencyOrder(Order order);
+
+	/**
+	 * 配资订单利息计算
+	 *
+	 * @param order 订单数据
+	 * @return 结果
+	 */
+	R calculateInterestAmount(Order order);
 }

+ 57 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -39,9 +39,11 @@ import org.springblade.check.feign.ICheckClient;
 import org.springblade.client.entity.*;
 import org.springblade.client.feign.*;
 import org.springblade.client.vo.GoodsDescVO;
+import org.springblade.common.enums.NumberEnum;
 import org.springblade.common.utils.NumToWords;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
@@ -8353,6 +8355,61 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		return R.data(salesOrder);
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R calculateInterestAmount(Order order) {
+		Order nowOrder = baseMapper.selectById(order.getId());
+		if (org.springframework.util.ObjectUtils.isEmpty(nowOrder)) {
+			return R.fail("该订单无效,请检查数据");
+		}
+		BladeUser user = AuthUtil.getUser();
+		List<OrderItems> orderItemsList = orderItemsMapper.selectList(new LambdaQueryWrapper<OrderItems>()
+			.eq(OrderItems::getTenantId, user.getTenantId()).eq(OrderItems::getPid, order.getId()).eq(OrderItems::getIsDeleted, 0));
+		if (CollectionUtils.isEmpty(orderItemsList)) {
+			return R.fail("缺少订单明细数据,请查看订单");
+		}
+		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(BigDecimal.valueOf(0.8)).multiply(daysInterestRate).multiply(BigDecimal.valueOf(order.getDays())).setScale(2, RoundingMode.DOWN);
+		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);
+		OrderItems updateItems = new OrderItems();
+		Date now = new Date();
+		for (OrderItems orderItems : orderItemsList) {
+			updateItems.setInterestAmount(orderItems.getInterestAmount().add(orderItems.getPrice()));
+			updateItems.setId(orderItems.getId());
+			updateItems.setUpdateTime(now);
+			updateItems.setUpdateUser(user.getUserId());
+			updateItems.setVersion(orderItems.getVersion() + 1);
+			orderItemsMapper.updateById(orderItems);
+		}
+		Order updateOrder = new Order();
+		updateOrder.setId(order.getId());
+		updateOrder.setInterestRate(order.getInterestRate());
+		updateOrder.setDays(order.getDays());
+		updateOrder.setInvestor(order.getInvestor());
+		updateOrder.setInvestorName(order.getInvestorName());
+		updateOrder.setInterestAmount(interestAmount);
+		updateOrder.setUpdateUser(user.getUserId());
+		updateOrder.setUpdateTime(now);
+		// updateOrder.setVersion(String.valueOf(Integer.parseInt(nowOrder.getVersion()) + 1));
+		updateOrder.setFundingRatio(order.getFundingRatio());
+		updateOrder.setTaxRate(order.getTaxRate());
+		int updateOrderCount = baseMapper.updateById(updateOrder);
+		if (updateOrderCount <= 0) {
+			throw new SecurityException("操作失败,请联系管理员");
+		}
+		return R.success("操作成功");
+	}
+
 	/**
 	 * 状态统计
 	 * <p>