From dba9034024de73ebf8d1184b53ec9a559c1c12c6 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期四, 13 三月 2025 18:08:33 +0800 Subject: [PATCH] bug修改 --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 153 insertions(+), 12 deletions(-) diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java index 042c48e..b880dd1 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java +++ b/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; + } } -- Gitblit v1.7.1