Bläddra i källkod

调整订单瑜伽砖快递包材

fgd 1 år sedan
förälder
incheckning
6caf64ff62

+ 34 - 3
sd-business/src/main/java/com/sd/business/service/order/impl/OrderServiceImpl.java

@@ -1268,6 +1268,31 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
                     v1.setQuantity(v1.getQuantity().add(v2.getQuantity()));
                     return v1;
                 }));
+        Map<String, BomSpec> bomSpecMap = bomSpecService.mapKEntity(BomSpec::getCode, q -> q.in(BomSpec::getCode, "40305028", "40305032", "40305033"));
+        Long bomSpecId = bomSpecMap.get("40305028").getId();
+        OrderPackageBomVo orderPackageBomVo = bomVoMap.get(bomSpecId);
+        // 判断是否有装瑜伽砖快递袋,2-4个数量更换快递包材
+        if (orderPackageBomVo == null
+                || orderPackageBomVo.getQuantity().compareTo(BigDecimal.ONE) <= 0
+                || orderPackageBomVo.getQuantity().compareTo(BigDecimal.valueOf(4)) > 0) {
+            return new ArrayList<>(bomVoMap.values());
+        }
+
+        BomSpec bomSpec;
+        if (orderPackageBomVo.getQuantity().compareTo(BigDecimal.valueOf(2)) == 0) {
+            bomSpec = bomSpecMap.get("40305032");
+        } else {
+            bomSpec = bomSpecMap.get("40305033");
+        }
+        OrderPackageBomVo packageBomVo = new OrderPackageBomVo();
+        packageBomVo.setBomSpecName(bomSpec.getName());
+        packageBomVo.setBomSpecCode(bomSpec.getCode());
+        packageBomVo.setCostPrice(bomSpec.getCostPrice());
+        packageBomVo.setInternalSellingPrice(bomSpec.getInternalSellingPrice());
+        packageBomVo.setBomSpecId(bomSpec.getId());
+        packageBomVo.setQuantity(BigDecimal.ONE);
+        bomVoMap.put(bomSpecId, packageBomVo);
+
         return new ArrayList<>(bomVoMap.values());
     }
 
@@ -1302,11 +1327,17 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
         }
         List<OrderSku> orderSkuList = orderSkuService.list(q -> q.eq(OrderSku::getOrderId, orderInfo.getId()));
+        // 筛选掉赠品sku
+        List<Long> skuSpecIds = orderSkuList.stream().map(OrderSku::getSkuSpecId).collect(Collectors.toList());
+        Set<Long> giftSkuSpecIds = skuSpecService.getGiftIdListByIdList(skuSpecIds);
+        List<OrderSku> tempOrderSkuList = orderSkuList.stream()
+                .filter(item -> giftSkuSpecIds.isEmpty() || !giftSkuSpecIds.contains(item.getSkuSpecId()))
+                .collect(Collectors.toList());
         // sku的数量
-        BigDecimal quantity = orderSkuList.stream().map(OrderSku::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal quantity = tempOrderSkuList.stream().map(OrderSku::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
         // sku快递包材费
         BigDecimal skuDeliveryMaterialsFee = newDeliveryMaterialsFee.divide(quantity, 3, RoundingMode.CEILING);
-        orderSkuList.forEach(item ->
+        tempOrderSkuList.forEach(item ->
                 item.setDeliveryMaterialsFee(skuDeliveryMaterialsFee)
         );
         // 订单更新快递包材费
@@ -1315,7 +1346,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderInfo> implem
         updateOrderInfo.setDeliveryMaterialsFee(skuDeliveryMaterialsFee.multiply(quantity).setScale(2, RoundingMode.HALF_UP));
         updateOrderInfo.setTotalAmount(totalAmount.subtract(oldDeliveryMaterialsFee).add(orderInfo.getDeliveryMaterialsFee()));
         this.updateById(updateOrderInfo);
-        orderSkuService.updateBatchById(orderSkuList);
+        orderSkuService.updateBatchById(tempOrderSkuList);
         ObsFileUtil.editFile(dto.getOuterBoxSelfAdhesiveStickerFile(), dto.getId(), 1);
     }
 

+ 51 - 0
sd-wln/src/main/java/com/sd/wln/service/impl/WlnOrderServiceImpl.java

@@ -12,11 +12,13 @@ import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.framework.mybatis.holder.LogicHolder;
 import com.sd.business.entity.artwork.po.ArtworkLibrary;
 import com.sd.business.entity.bom.bo.BomSpecBo;
+import com.sd.business.entity.bom.po.BomSpec;
 import com.sd.business.entity.department.po.Department;
 import com.sd.business.entity.order.enums.OrderClassifyEnum;
 import com.sd.business.entity.order.enums.OrderExceptionTypeEnum;
 import com.sd.business.entity.order.enums.OrderStatusEnum;
 import com.sd.business.entity.order.po.*;
+import com.sd.business.entity.order.vo.OrderPackageBomVo;
 import com.sd.business.entity.price.po.PriceBillingStandardDetail;
 import com.sd.business.entity.sku.po.SkuSpec;
 import com.sd.business.entity.sku.po.SkuSpecLink;
@@ -37,6 +39,7 @@ import org.springframework.transaction.TransactionDefinition;
 import org.springframework.transaction.TransactionStatus;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -535,6 +538,54 @@ public class WlnOrderServiceImpl implements WlnOrderService {
             }
         }
 
+        Map<Long, BomSpecBo> bomSpecBoMap = context.getBomSpecBoMap();
+        List<String> packageBomSpecList = Arrays.asList("40305028", "40305032", "40305033");
+        Map<String, BomSpecBo> packageBomSpecMap = bomSpecBoMap.values().stream()
+                .filter(item -> packageBomSpecList.contains(item.getBomSpecCode()))
+                .collect(Collectors.toMap(BomSpecBo::getBomSpecCode, Function.identity()));
+        Long bomSpecId = packageBomSpecMap.get("40305028").getBomSpecId();
+        OrderPackageBom orderPackageBomVo = map.get(bomSpecId);
+        // 判断是否有装瑜伽砖快递袋,2-4个数量更换快递包材
+        if (orderPackageBomVo != null
+                && orderPackageBomVo.getQuantity().compareTo(BigDecimal.valueOf(2)) >= 0
+                && orderPackageBomVo.getQuantity().compareTo(BigDecimal.valueOf(4)) <= 0) {
+            BomSpecBo bomSpec;
+            if (orderPackageBomVo.getQuantity().compareTo(BigDecimal.valueOf(2)) == 0) {
+                bomSpec = packageBomSpecMap.get("40305032");
+            } else {
+                bomSpec = packageBomSpecMap.get("40305033");
+            }
+            OrderPackageBomVo packageBomVo = new OrderPackageBomVo();
+            packageBomVo.setBomSpecName(bomSpec.getBomSpecName());
+            packageBomVo.setBomSpecCode(bomSpec.getBomSpecCode());
+            packageBomVo.setCostPrice(bomSpec.getCostPrice());
+            packageBomVo.setInternalSellingPrice(bomSpec.getInternalSellingPrice());
+            packageBomVo.setBomSpecId(bomSpec.getBomSpecId());
+            packageBomVo.setQuantity(BigDecimal.ONE);
+            map.put(bomSpecId, packageBomVo);
+
+            // 修改订单金额(去除赠品)
+            List<Long> giftSkuIds = giftSkuList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
+            List<OrderSku> editOrderSkuList = orderSkuList.stream()
+                    .filter(item -> giftSkuIds.isEmpty() || !giftSkuIds.contains(item.getId()))
+                    .collect(Collectors.toList());
+
+            // sku的数量
+            BigDecimal quantity = editOrderSkuList.stream().map(OrderSku::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
+            // sku快递包材费
+            BigDecimal newDeliveryMaterialsFee = map.values().stream()
+                    .map(item -> item.getInternalSellingPrice().multiply(item.getQuantity()))
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            BigDecimal skuDeliveryMaterialsFee = newDeliveryMaterialsFee.divide(quantity, 3, RoundingMode.CEILING);
+            editOrderSkuList.forEach(item ->
+                    item.setDeliveryMaterialsFee(skuDeliveryMaterialsFee)
+            );
+            // 订单更新快递包材费
+            BigDecimal oldDeliveryMaterialsFee = orderInfo.getDeliveryMaterialsFee();
+            orderInfo.setDeliveryMaterialsFee(skuDeliveryMaterialsFee.multiply(quantity).setScale(2, RoundingMode.HALF_UP));
+            orderInfo.setTotalAmount(orderInfo.getTotalAmount().subtract(oldDeliveryMaterialsFee).add(orderInfo.getDeliveryMaterialsFee()));
+        }
+
         context.getSaveOrderList().add(orderInfo);
         context.getSaveOrderSkuList().addAll(orderSkuList);
         context.getSaveOrderSkuBomList().addAll(orderSkuBomList);