|
@@ -534,7 +534,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
|
|
//把数据库的钱转换为数据库的积分
|
|
|
public static Long money2Integral(Integer money) {
|
|
|
- return Long.valueOf((long)money * DistriConstants.MONEY2INTEGRAL);
|
|
|
+ return Long.valueOf((long) money * DistriConstants.MONEY2INTEGRAL);
|
|
|
}
|
|
|
|
|
|
//把数据库的积分转换为数据库的钱
|
|
@@ -711,11 +711,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
double rmb = (orderItem.getHighPrecisionPrice().doubleValue() * orderItem.getCount()) - integral2Money(orderItemTmp.getPayPoints());
|
|
|
if (rmb > 0 && rmb < 1) {
|
|
|
payRmb = 1;
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
double multiplied = rmb * 10;
|
|
|
// 对乘以10后的数使用 Math.ceil() 向上取整
|
|
|
double roundedUp = Math.ceil(multiplied);
|
|
|
- payRmb = (int)(roundedUp/10.0);
|
|
|
+ payRmb = (int) (roundedUp / 10.0);
|
|
|
}
|
|
|
}
|
|
|
orderItem.setPayRmb(payRmb);//本商品实付人民币
|
|
@@ -740,6 +740,51 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
tradeOrderMapper.insert(order);
|
|
|
|
|
|
orderItems.forEach(orderItem -> orderItem.setOrderId(order.getId()));
|
|
|
+
|
|
|
+ /*
|
|
|
+ * 把每一笔运费平摊到相同的运费模板的订单项中,并且把支付金额累加上运费
|
|
|
+ * 同一个店铺中的订单项中的同运费模板的运费只会计算一次
|
|
|
+ * 所以多个订单项中只会有一笔订单项中有运费金额
|
|
|
+ * 拿到相同运费模板的运费金额,然后平摊到相同运费模板的订单项中
|
|
|
+ * 实际上运费模板是基于spu的,所以只要找到同spu的订单项就可以了
|
|
|
+ */
|
|
|
+ List<Long> spuIds = orderItems.stream().map(TradeOrderItemDO::getSpuId).distinct().collect(Collectors.toList());
|
|
|
+ List<Long> deliveryTemplateIds = productSpuMapper.selectList(ProductSpuDO::getId, spuIds).stream().map(ProductSpuDO::getDeliveryTemplateId)
|
|
|
+ .distinct().collect(Collectors.toList());
|
|
|
+ Map<Long, Long> templateIdMap = new HashMap<>();
|
|
|
+ deliveryTemplateIds.forEach(id -> {
|
|
|
+ templateIdMap.put(id, 0L);
|
|
|
+ });
|
|
|
+
|
|
|
+ Map<Long, Integer> deliveryPriceMap = new HashMap<>();
|
|
|
+ templateIdMap.forEach((id, count) -> {
|
|
|
+ orderItems.forEach(item -> {
|
|
|
+ ProductSpuDO spu = productSpuMapper.selectById(item.getSpuId());
|
|
|
+ if (spu.getDeliveryTemplateId().equals(id)) {
|
|
|
+ templateIdMap.put(id, templateIdMap.get(id) + 1);
|
|
|
+
|
|
|
+ if(item.getDeliveryPrice() != 0){
|
|
|
+ deliveryPriceMap.put(spu.getDeliveryTemplateId(), item.getDeliveryPrice());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ orderItems.forEach(itemDO -> {
|
|
|
+ ProductSpuDO spuDO = productSpuMapper.selectById(itemDO.getSpuId());
|
|
|
+ templateIdMap.forEach((id, count) -> {
|
|
|
+ if (spuDO.getDeliveryTemplateId().equals(id)) {
|
|
|
+ itemDO.setDeliveryPrice(deliveryPriceMap.get(spuDO.getDeliveryTemplateId()) / count.intValue());
|
|
|
+
|
|
|
+ // 订单项实付rmb = 订单项实付rmb + 运费金额
|
|
|
+ itemDO.setPayRmb(itemDO.getPayRmb() + itemDO.getDeliveryPrice());
|
|
|
+ // 订单项实付金额 = 订单项实付金额 + 运费金额
|
|
|
+ itemDO.setPayPrice(itemDO.getPayPrice() + itemDO.getDeliveryPrice());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
tradeOrderItemMapper.insertBatch(orderItems);
|
|
|
|
|
|
// 4. 订单创建后的逻辑
|
|
@@ -786,7 +831,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
String OrderNum = order.getNo();
|
|
|
Long payIntegral = order.getPayIntegral().longValue();//每个订单使用的积分
|
|
|
Boolean flag = integralService.updateUserIntegral(userId, userId, CaclEnum.ORDER_PAY_INTEGRAL, payIntegral * (-1), 0L, tradeOrderId, OrderNum);
|
|
|
- if(!flag){
|
|
|
+ if (!flag) {
|
|
|
throw exception(ORDER_PAY_ERROR);
|
|
|
}
|
|
|
}
|
|
@@ -1166,7 +1211,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
integralService.updateUserIntegral(tradeOrderDO.getUserId(), ancesterUserId, CaclEnum.ORDER_PAY_INTEGRAL_ANCESTER, 0L, totalAncestorFreezeAmount, tradeOrderId, OrderNum);
|
|
|
|
|
|
//修改购物者本人获得的冻结峰值
|
|
|
- integralService.updateIntegralFreezeHighQuota(tradeOrderDO.getUserId(), tradeOrderDO.getUserId(),CaclEnum.ORDER_PAY_FREEZE_HIGH_QUOTA,totalFreezeHighQuota,tradeOrderId,OrderNum);
|
|
|
+ integralService.updateIntegralFreezeHighQuota(tradeOrderDO.getUserId(), tradeOrderDO.getUserId(), CaclEnum.ORDER_PAY_FREEZE_HIGH_QUOTA, totalFreezeHighQuota, tradeOrderId, OrderNum);
|
|
|
log.warn("[TradeOrderUpdateServiceImpl.updateOrderPaid]$$$:[tradeOrderId({}),ancesterUserId({}),totalAncestorFreezeAmount({})]" + new Date(),
|
|
|
tradeOrderId, ancesterUserId, totalAncestorFreezeAmount);
|
|
|
|
|
@@ -1500,7 +1545,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
Long userId = order.getUserId();
|
|
|
//如果订单有使用积分,则退回积分
|
|
|
if (payIntegral > 0) {
|
|
|
- integralService.updateUserIntegral(userId,CaclEnum.ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL,payIntegral,tradeOrderId,orderNum);
|
|
|
+ integralService.updateUserIntegral(userId, CaclEnum.ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL, payIntegral, tradeOrderId, orderNum);
|
|
|
}
|
|
|
|
|
|
count++;
|