这一节的主要内容是验价:
/**
* 计算价格价格的方法
* @param orderEntity
* @param orderItemEntities
*/
private void computePrice(OrderEntity orderEntity, List<OrderItemEntity> orderItemEntities) {
//总价
BigDecimal total = new BigDecimal("0.0");
//优惠价
BigDecimal coupon = new BigDecimal("0.0");
BigDecimal intergration = new BigDecimal("0.0");
BigDecimal promotion = new BigDecimal("0.0");
//积分、成长值
Integer integrationTotal = 0;
Integer growthTotal = 0;
//订单总额,叠加每一个订单项的总额信息
for (OrderItemEntity orderItem : orderItemEntities) {
//优惠价格信息
coupon = coupon.add(orderItem.getCouponAmount());
promotion = promotion.add(orderItem.getPromotionAmount());
intergration = intergration.add(orderItem.getIntegrationAmount());
//总价
total = total.add(orderItem.getRealAmount());
//积分信息和成长值信息
integrationTotal += orderItem.getGiftIntegration();
growthTotal += orderItem.getGiftGrowth();
}
//1、订单价格相关的
orderEntity.setTotalAmount(total);
//设置应付总额(总额+运费)
orderEntity.setPayAmount(total.add(orderEntity.getFreightAmount()));
orderEntity.setCouponAmount(coupon);
orderEntity.setPromotionAmount(promotion);
orderEntity.setIntegrationAmount(intergration);
//设置积分成长值信息
orderEntity.setIntegration(integrationTotal);
orderEntity.setGrowth(growthTotal);
//设置删除状态(0-未删除,1-已删除)
orderEntity.setDeleteStatus(0);
}
这段代码定义了一个名为 computePrice
的方法,其主要作用是计算和核对订单及其订单项的总价格,并更新订单实体(OrderEntity
)的相关属性。
BigDecimal 类型:使用 BigDecimal
类型来处理价格计算,以确保精度,避免浮点数运算的精度问题。
累加逻辑:通过累加每个订单项的实际金额和优惠金额来计算订单的总价和应付总额。
积分和成长值:订单项可能包含积分和成长值,这些值在订单创建时进行累加,以便为用户提供相应的积分和成长值。
状态设置:除了价格信息,该方法还设置了订单的删除状态,这是一个好的做法,确保订单实体的完整性。
参数传递:该方法接受一个订单实体和一个订单项列表作为参数,基于这些信息执行价格计算。
整体来看,computePrice
方法是订单处理流程中的一个关键步骤,确保了订单价格的准确性和订单信息的完整性。
如果总价相差过大,需要用户确认。
//2、验证价格
BigDecimal payAmount = order.getOrder().getPayAmount();
BigDecimal payPrice = vo.getPayPrice();
if (Math.abs(payAmount.subtract(payPrice).doubleValue()) < 0.01) {
// 创建订单
} else {
// 返回给前端,提示总价有较大变化
}
这一节的主要内容生保存订单数据,把订单头和订单明细的数据保存到数据库中。
private void saveOrder(OrderCreateTo orderCreateTo) {
//获取订单信息
OrderEntity order = orderCreateTo.getOrder();
order.setModifyTime(new Date());
order.setCreateTime(new Date());
//保存订单
this.baseMapper.insert(order);
//获取订单项信息
List<OrderItemEntity> orderItems = orderCreateTo.getOrderItems();
//批量保存订单项数据
orderItemService.saveBatch(orderItems);
}
这段代码定义了一个名为 saveOrder
的私有方法,主要用于保存订单及其相关订单项到数据库中。
获取订单信息:从 OrderCreateTo
对象中获取 OrderEntity
对象,这代表了要保存的订单数据。
设置时间戳:为订单实体设置创建时间和修改时间,均设置为当前日期和时间(new Date()
)。
保存订单:调用 baseMapper.insert(order)
方法将订单数据插入到数据库中。这里 baseMapper
很可能是 MyBatis 或 MyBatis-Plus 数据库操作框架中使用的 Mapper 接口,用于执行实际的数据库插入操作。
获取订单项信息:从 OrderCreateTo
对象中获取包含所有订单项的列表 orderItems
。
批量保存订单项:使用 orderItemService.saveBatch(orderItems)
方法批量保存所有订单项数据。这里 orderItemService
可能是一个服务层组件,负责处理订单项的保存逻辑,saveBatch
方法用于执行批量插入操作。
日期时间设置:在保存订单之前,代码设置了订单的创建和修改时间,这有助于记录订单的创建时间,并且在需要时可以用于跟踪订单的最后更新时间。
数据库操作:代码使用了数据访问层(可能是 MyBatis)的 Mapper 接口来执行数据库的插入操作。这是一种常见的数据持久化方式,可以有效地将数据模型转换为数据库中的记录。
批量处理:对于订单项的保存,使用了批量保存方法,这有助于提高性能,尤其是在处理包含大量订单项的订单时。
saveOrder
方法是订单服务中的一个重要环节,负责将订单及其细节持久化到数据库中。这是订单创建流程的关键步骤之一,确保了订单数据的持久化存储。
因篇幅问题不能全部显示,请点此查看更多更全内容