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