|
|
@@ -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>
|