|
|
@@ -0,0 +1,110 @@
|
|
|
+package com.ruoyi.shop.order.service.createorder.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.ruoyi.common.exception.ServiceException;
|
|
|
+import com.ruoyi.shop.coupon.domain.vo.CouponReceiveRecordVo;
|
|
|
+import com.ruoyi.shop.marketing.groupbuy.domain.GroupBuyActivity;
|
|
|
+import com.ruoyi.shop.marketing.groupbuy.service.IGroupBuyActivityService;
|
|
|
+import com.ruoyi.shop.order.domain.ShopOrder;
|
|
|
+import com.ruoyi.shop.order.domain.bo.ShopOrderBo;
|
|
|
+import com.ruoyi.shop.order.domain.bo.ShopOrderDetailBo;
|
|
|
+import com.ruoyi.shop.order.domain.bo.createorder.CreateOrderBo;
|
|
|
+import com.ruoyi.shop.order.domain.bo.createorder.CreateOrderDetailBo;
|
|
|
+import com.ruoyi.shop.order.exception.ShopOrderExceptionEnum;
|
|
|
+import com.ruoyi.shop.order.service.createorder.ICreateActivityOrderService;
|
|
|
+import com.ruoyi.shop.order.service.createorder.ICreateOrderService;
|
|
|
+import com.ruoyi.shop.order.service.shopcoupon.IUseShopCouponService;
|
|
|
+import com.ruoyi.shop.product.domain.vo.ProductSkuSetVo;
|
|
|
+import com.ruoyi.shop.usershoppingcart.service.IUserShoppingCartService;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 拼团订单服务
|
|
|
+ *
|
|
|
+ * @author lubo
|
|
|
+ * @date 2025-10-23
|
|
|
+ */
|
|
|
+@RequiredArgsConstructor
|
|
|
+@Service
|
|
|
+public class CreateGroupBuyOrderService extends AbstractCreateOrderService implements ICreateOrderService, ICreateActivityOrderService {
|
|
|
+
|
|
|
+ @Resource(name = "commonOrderUseShopCouponService")
|
|
|
+ private IUseShopCouponService useShopCouponService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private IGroupBuyActivityService groupBuyActivityService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ShopOrder createOrder(CreateOrderBo createOrderBo) {
|
|
|
+ ShopOrderBo shopOrderBo = this.buildOrder(createOrderBo);
|
|
|
+ if (!shopOrderBo.getPointEnough()) {
|
|
|
+ throw new ServiceException(ShopOrderExceptionEnum.POINT_NOT_ENOUGH);
|
|
|
+ }
|
|
|
+ ShopOrder orderEntity = createOrderEntity(shopOrderBo);
|
|
|
+
|
|
|
+ return orderEntity;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ShopOrderBo buildOrder(CreateOrderBo createOrderBo) {
|
|
|
+ //初始化主单
|
|
|
+ ShopOrderBo shopOrderBo = initShopOrderBo(createOrderBo);
|
|
|
+ //拼团活动主单相关信息初始化
|
|
|
+ activityOrderBoInit(createOrderBo, shopOrderBo);
|
|
|
+ //初始化子单
|
|
|
+ shopOrderBo.setShopOrderDetailBoList(buildBaseOrderDetailList(createOrderBo));
|
|
|
+ //计算总计
|
|
|
+ totalHandle(shopOrderBo);
|
|
|
+ //商品优惠券处理
|
|
|
+ useShopCouponService.handleProductCoupon(createOrderBo.getUserId(), shopOrderBo, this::filterCouponList);
|
|
|
+ //通用优惠券处理
|
|
|
+ useShopCouponService.handleUniversalCoupon(createOrderBo.getUserId(), shopOrderBo, this::filterCouponList);
|
|
|
+
|
|
|
+ //计算可送积分
|
|
|
+ //givePointHandle(shopOrderBo);
|
|
|
+ //运费处理
|
|
|
+ freightHandle(shopOrderBo);
|
|
|
+ return shopOrderBo;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 过滤只适全拼团的优惠券
|
|
|
+ *
|
|
|
+ * @param list
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<CouponReceiveRecordVo> filterCouponList(List<CouponReceiveRecordVo> list) {
|
|
|
+ if (CollectionUtil.isEmpty(list)) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ return list.stream()
|
|
|
+ .filter(couponReceiveRecordVo -> couponReceiveRecordVo.getCouponVo().isAdaptGroupBuy())
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ShopOrderBo activityOrderBoInit(CreateOrderBo createOrderBo, ShopOrderBo shopOrderBo) {
|
|
|
+ shopOrderBo.setMarketingType(createOrderBo.getMarketingType());
|
|
|
+ shopOrderBo.setActivityId(createOrderBo.getActivityId());
|
|
|
+ GroupBuyActivity groupBuyActivity = groupBuyActivityService.loadById(createOrderBo.getActivityId(), true);
|
|
|
+ shopOrderBo.setActivityTitle(groupBuyActivity.getName());
|
|
|
+ shopOrderBo.setSponsorActivityId(groupBuyActivity.getId());
|
|
|
+ return shopOrderBo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected ProductSkuSetVo biuldProductSkuSetVo(CreateOrderBo createOrderBo, CreateOrderDetailBo createOrderDetailBo) {
|
|
|
+ return productSkuSetService.loadVoByBusinessIdAndProductIdAndActivityProductIdAndSkuHash(createOrderBo.getBusinessId(),
|
|
|
+ createOrderDetailBo.getProductId(),
|
|
|
+ createOrderDetailBo.getSkuHashCode(), createOrderDetailBo.getActivityProductId(), createOrderBo.getMarketingType());
|
|
|
+ }
|
|
|
+}
|