mitao
2025-03-12 7a92c0228a9b282e4b3cb2ae4a0035cec34feb67
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -13,6 +13,7 @@
import com.ruoyi.common.core.enums.BondStatusEnum;
import com.ruoyi.common.core.enums.CouponUseEnum;
import com.ruoyi.common.core.enums.GroupStatusEnum;
import com.ruoyi.common.core.enums.MemberVipClassifyEnum;
import com.ruoyi.common.core.enums.OrderFromEnum;
import com.ruoyi.common.core.enums.OrderStatusEnum;
import com.ruoyi.common.core.enums.OrderTypeEnum;
@@ -56,6 +57,7 @@
import com.ruoyi.system.api.domain.MemberAddress;
import com.ruoyi.system.api.domain.Order;
import com.ruoyi.system.api.domain.OrderAuctionBond;
import com.ruoyi.system.api.domain.PromotionWishRecommend;
import com.ruoyi.system.api.domain.dto.CouponMemberDTO;
import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
@@ -71,6 +73,7 @@
import com.ruoyi.system.api.domain.vo.MemberOrderListVO;
import com.ruoyi.system.api.domain.vo.MemberOrderNumVO;
import com.ruoyi.system.api.domain.vo.MemberTiOrderVO;
import com.ruoyi.system.api.domain.vo.MgtPromotionWishRecommendVO;
import com.ruoyi.system.api.domain.vo.OrderVO;
import com.ruoyi.system.api.feignClient.AuctionClient;
import com.ruoyi.system.api.feignClient.GoodsSkuClient;
@@ -158,7 +161,7 @@
    @Override
    public void saveOrderOne(OrderDTO OrderDTO) {
    public Long saveOrderOne(OrderDTO OrderDTO) {
        Order order=new Order();
        if (OrderDTO.getOrderFrom().getCode()==1){
            order.setOrderFrom(OrderFromEnum.COMMODITY_ORDER);
@@ -190,7 +193,8 @@
        order.setTotalAmount(OrderDTO.getTotalAmount());
        order.setOrderStatus(OrderStatusEnum.TO_PLAY);
        order.setPoints(OrderDTO.getPoints());
        order.setGoodsQuantity(1);
        order.setGoodsQuantity(
                Objects.nonNull(OrderDTO.getGoodsQuantity()) ? OrderDTO.getGoodsQuantity() : 1);
        order.setReceiverName(OrderDTO.getReceiverName());
        order.setReceiverPhone(OrderDTO.getReceiverphone());
        order.setReceiverCity(OrderDTO.getReceiverCity());
@@ -232,7 +236,7 @@
        }
        return order.getId();
    }
    /**
@@ -317,6 +321,10 @@
            order.setOrderNo(OrderUtil.getOrderNoForPrefix("TG"));
            order.setIsOrder(2);
        }
        if (memberOrderDTO.getOrderFrom() == OrderFromEnum.WISH_ORDER.getCode()) {
            order.setOrderFrom(OrderFromEnum.WISH_ORDER);
            order.setOrderNo(OrderUtil.getOrderNoForPrefix("QG"));
        }
        if (memberOrderDTO.getPaymentMethod()==1){
            order.setPaymentMethod(PaymentMethodEnum.WECHAT);
        }if (memberOrderDTO.getPaymentMethod()==2){
@@ -331,22 +339,36 @@
            if (goodsSku.getStock()<memberOrderDTO.getGoodsQuantity()){
                throw new ServiceException("该商品已售罄,暂无库存");
            }else{
                // 远程调用用户服务,获取用户信息
                Member member = memberClient.getMembeOne(memberOrderDTO.getMemberId(),
                                SecurityConstants.INNER)
                        .getData();
                if (Objects.isNull(member)) {
                    throw new ServiceException("获取用户信息失败");
                }
                GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
                goodsStockUpdDTO.setGoodsSkuId(goodsSku.getId());
                goodsStockUpdDTO.setAuctionStock(goodsSku.getStock()-memberOrderDTO.getGoodsQuantity());
                goodsSkuClient.updGoodsStock1(goodsStockUpdDTO,
                        SecurityConstants.INNER);
                order.setSkuName(goodsSku.getSkuName());
                order.setPrice(goodsSku.getPrice());
                order.setCoverPic(goodsSku.getCoverPic());
                order.setGoodsId(goodsSku.getId());
                if (Objects.nonNull(member.getVipClassify()) && !member.getVipClassify()
                        .equals(MemberVipClassifyEnum.NORMAL.getCode())) {
                    BigDecimal vipPrice = getVipPrice(goodsSku, member.getVipClassify());
                    order.setPrice(vipPrice);
                }
            }
            memberOrderVO.setGoodsSkuId(memberOrderDTO.getGoodsSkuId());
            memberOrderVO.setPrice(goodsSku.getPrice());
            memberOrderVO.setCoverPic(goodsSku.getCoverPic());
            memberOrderVO.setSkuName(goodsSku.getSkuName());
            pice=goodsSku.getPrice();
            pice = order.getPrice();
        }
        if (memberOrderDTO.getOrderFrom()==2){
            GoodsSeckill data = goodsSkuClient.getGoodsSeckillOne(memberOrderDTO.getGoodsSkuId(), SecurityConstants.INNER).getData();
@@ -461,6 +483,38 @@
            order.setSjPrice(goodsSku.getPrice());
            order.setGoodsId(goodsSku.getId());
        }
        if (memberOrderDTO.getOrderFrom() == OrderFromEnum.WISH_ORDER.getCode()) {
            // 远程调用营销服务,获取推荐商品信息
            PromotionWishRecommend recommend = promotionClient.getPromotionWishRecommend(
                    memberOrderDTO.getGoodsSkuId(),
                    SecurityConstants.INNER).getData();
            if (Objects.isNull(recommend)) {
                throw new ServiceException("推荐商品不存在");
            }
            if (recommend.getExpireTime().isBefore(LocalDateTime.now())) {
                throw new ServiceException("推荐商品已过期");
            }
            if (recommend.getAvailableNum().compareTo(memberOrderDTO.getGoodsQuantity()) < 0) {
                throw new ServiceException("推荐商品可购数量不足");
            }
            // 远程调用,更新可购数量
            Integer res = promotionClient.subRecommendAvailableNum(
                    memberOrderDTO.getGoodsQuantity(),
                    recommend.getId(), SecurityConstants.INNER).getData();
            if (res == 0) {
                throw new ServiceException("推荐商品可购数量不足");
            }
            memberOrderVO.setGoodsSkuId(memberOrderDTO.getGoodsSkuId());
            memberOrderVO.setPrice(recommend.getSellingPrice());
            memberOrderVO.setCoverPic(recommend.getGoodsImageUrl());
            memberOrderVO.setSkuName(recommend.getGoodsName());
            pice = recommend.getSellingPrice();
            order.setSkuName(recommend.getGoodsName());
            order.setPrice(recommend.getSellingPrice());
            order.setCoverPic(recommend.getGoodsImageUrl());
            order.setSjPrice(recommend.getSellingPrice());
            order.setGoodsId(recommend.getId());
        }
        order.setOrderRemark(memberOrderDTO.getOrderRemark());
        order.setMemberId(memberOrderDTO.getMemberId());
        order.setGoodsQuantity(memberOrderDTO.getGoodsQuantity());
@@ -533,8 +587,21 @@
        return memberOrderVO;
    }
    private BigDecimal getVipPrice(GoodsSku goodsSku, Integer vipClassify) {
        if (Objects.isNull(goodsSku)) {
            throw new ServiceException("当前商品已下架");
        }
        BigDecimal price = BigDecimal.ZERO;
        if (MemberVipClassifyEnum.VIP.getCode().equals(vipClassify)) {
            price = goodsSku.getVipPrice();
        } else if (MemberVipClassifyEnum.SUPER_VIP.getCode().equals(vipClassify)) {
            price = goodsSku.getSuperVipPrice();
        }
        return price;
    }
    @Override
    public MemberTiOrderVO updMemberOrder(MemberOrderDTO memberOrderDTO) {
        Order order = baseMapper.selectById(memberOrderDTO.getId());
        if(memberOrderDTO.getOrderRemark()!=null){
            order.setOrderRemark(memberOrderDTO.getOrderRemark());
@@ -567,15 +634,14 @@
                    goodsStockUpdDTO.setAuctionStock(m-memberOrderDTO.getGoodsQuantity());
                    goodsSkuClient.updGoodsStock1(goodsStockUpdDTO,
                            SecurityConstants.INNER);
                    order.setTotalAmount(goodsSku.getPrice().multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity())));
                order.setTotalAmount(order.getPrice()
                        .multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity())));
                    order.setGoodsQuantity(memberOrderDTO.getGoodsQuantity());
                    memberOrderVO.setGoodsSkuId(memberOrderDTO.getGoodsSkuId());
                    memberOrderVO.setPrice(goodsSku.getPrice());
                    memberOrderVO.setCoverPic(goodsSku.getCoverPic());
                    memberOrderVO.setSkuName(goodsSku.getSkuName());
                }
            if (order.getOrderFrom().getCode()==2){
                MemberOrderDTO memberOrderDTO1=new MemberOrderDTO();
                memberOrderDTO1.setMemberId(order.getMemberId());
@@ -629,8 +695,8 @@
                    memberOrderVO.setYouhiPrice(data.getSeckillPrice());
        }  if (order.getOrderFrom().getCode()==3){
            }
            if (order.getOrderFrom().getCode() == 3) {
                order.setOrderFrom(OrderFromEnum.GROUP_PURCHASE_ORDERS);
                GoodsGroupPurchase data = goodsSkuClient.getGoodsSeckiGoodsGroupPurchaseOne(order.getGoodsSkuId(), SecurityConstants.INNER).getData();
                GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(data.getGoodsSkuId(), SecurityConstants.INNER).getData();
@@ -660,6 +726,40 @@
                        }
                    }
                }
            }
            if (order.getOrderFrom() == OrderFromEnum.WISH_ORDER) {
                // 远程调用营销服务,获取推荐商品信息
                PromotionWishRecommend recommend = promotionClient.getPromotionWishRecommend(
                        order.getGoodsSkuId(),
                        SecurityConstants.INNER).getData();
                if (Objects.isNull(recommend)) {
                    throw new ServiceException("推荐商品不存在");
                }
                Integer availableNum = recommend.getAvailableNum() + order.getGoodsQuantity();
                if (availableNum.compareTo(memberOrderDTO.getGoodsQuantity()) < 0) {
                    throw new ServiceException("推荐商品可购数量不足");
                }
                // 如果最新购买数比锁定库存数大,则扣减多出来的商品数量,否则恢复多出的锁定库存
                if (memberOrderDTO.getGoodsQuantity().compareTo(order.getGoodsQuantity()) > 0) {
                    // 远程调用,更新可购数量
                    Integer res = promotionClient.subRecommendAvailableNum(
                            memberOrderDTO.getGoodsQuantity() - order.getGoodsQuantity(),
                            recommend.getId(), SecurityConstants.INNER).getData();
                    if (res == 0) {
                        throw new ServiceException("推荐商品可购数量不足");
                    }
                } else {
                    promotionClient.addRecommendAvailableNum(
                            order.getGoodsQuantity() - memberOrderDTO.getGoodsQuantity(),
                            recommend.getId(), SecurityConstants.INNER);
                }
                order.setTotalAmount(recommend.getSellingPrice()
                        .multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity())));
                order.setGoodsQuantity(memberOrderDTO.getGoodsQuantity());
                memberOrderVO.setGoodsSkuId(order.getGoodsSkuId());
                memberOrderVO.setPrice(recommend.getSellingPrice());
                memberOrderVO.setCoverPic(recommend.getGoodsImageUrl());
                memberOrderVO.setSkuName(recommend.getGoodsName());
            }
        }
        if (memberOrderDTO.getGoodsQuantity()!=null){
@@ -824,7 +924,10 @@
        Map<Long, GoodsSku> goodsUnitMap = getGoodsUnitMap(list);
        for (MemberOrderListVO MemberOrderList:list){
            if (MemberOrderList.getOrderStatus().getCode()==1){
                if (MemberOrderList.getOrderFrom().getCode()==1||MemberOrderList.getOrderFrom().getCode()==2||MemberOrderList.getOrderFrom().getCode()==3){
                if (MemberOrderList.getOrderFrom().getCode() == 1
                        || MemberOrderList.getOrderFrom().getCode() == 2
                        || MemberOrderList.getOrderFrom().getCode() == 3
                        || MemberOrderList.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) {
                    LocalDateTime localDateTime = MemberOrderList.getOrderTime().plusMinutes(30);
                    if (LocalDateTime.now().isAfter(localDateTime)) {
                        // dateTime1 在 dateTime2 之后
@@ -865,7 +968,12 @@
                            }
                            goodsSkuClient.updGoodsSeckill(goodsStockUpdDTO1,SecurityConstants.INNER);
                        }
                        // 恢复推荐商品可购数量
                        if (MemberOrderList.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) {
                            promotionClient.addRecommendAvailableNum(
                                    MemberOrderList.getGoodsQuantity(),
                                    MemberOrderList.getGoodsSkuId(), SecurityConstants.INNER);
                        }
                        this.updateById(order);
                    }
@@ -1138,6 +1246,11 @@
                }
            }
            // 恢复可购数量
            if (order.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) {
                promotionClient.addRecommendAvailableNum(
                        order.getGoodsQuantity(), order.getGoodsSkuId(), SecurityConstants.INNER);
            }
        }
        if (order.getOrderStatus().getCode() == 2) {
@@ -1181,7 +1294,11 @@
                }
            }
            // 恢复可购数量
            if (order.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) {
                promotionClient.addRecommendAvailableNum(
                        order.getGoodsQuantity(), order.getGoodsSkuId(), SecurityConstants.INNER);
            }
            if (order.getCouponId()!=0){
                CouponMemberDTO couponMemberDTO1=new CouponMemberDTO();
                couponMemberDTO1.setId(order.getCouponId());
@@ -1778,6 +1895,7 @@
            LogisticsDTO logisticsDTO = new LogisticsDTO();
            logisticsDTO.setCompany(order.getLogisticsNum());
            logisticsDTO.setPostid(order.getCourierNumber());
            logisticsDTO.setReceiverPhone(order.getReceiverPhone());
            Express100VO logisticsList = logisticsService.getLogisticsList(logisticsDTO);
            if (StringUtils.isNotNull(logisticsList)) {
                mgtOrderVO.setExpress100VO(logisticsList);
@@ -2042,4 +2160,27 @@
        List<Order> page1 = this.list(wrapper);
        return page1;
    }
    /**
     * 根据skuId获取心愿求购详情数据
     *
     * @param id
     * @return
     */
    @Override
    public MgtPromotionWishRecommendVO getWishDataBySkuId(Long id) {
        MgtPromotionWishRecommendVO vo = null;
        List<Order> list = this.lambdaQuery().eq(Order::getGoodsSkuId, id)
                .eq(Order::getOrderFrom, OrderFromEnum.WISH_ORDER)
                .ne(Order::getOrderStatus, OrderStatusEnum.CANCELED).list();
        if (CollUtils.isNotEmpty(list)) {
            vo = new MgtPromotionWishRecommendVO();
            Integer purchasedNum = list.stream().map(Order::getGoodsQuantity)
                    .reduce(0, Integer::sum);
            String orderNo = list.stream().map(Order::getOrderNo).collect(Collectors.joining(","));
            vo.setPurchasedNum(purchasedNum);
            vo.setOrderNo(orderNo);
        }
        return vo;
    }
}