From 2fda56177ac67539eafb5ed33fcbec488d2a1db5 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期二, 03 十二月 2024 17:35:58 +0800 Subject: [PATCH] bug修复 --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java | 481 ++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 383 insertions(+), 98 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 6cf205f..e4bd230 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 @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.enums.AuctionOrderTypeEnum; @@ -19,6 +20,7 @@ import com.ruoyi.common.core.enums.PointStatusEnum; import com.ruoyi.common.core.enums.RequestTypeEnum; import com.ruoyi.common.core.enums.ReturnRequestStatusEnum; +import com.ruoyi.common.core.enums.StartStatusEnum; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.page.BeanUtils; @@ -54,6 +56,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; @@ -69,6 +72,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; @@ -93,7 +97,9 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import lombok.Synchronized; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.map.HashedMap; +import org.jetbrains.annotations.NotNull; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.stereotype.Service; @@ -107,6 +113,7 @@ * @author mitao * @since 2024-05-16 */ +@Slf4j @Service @SuppressWarnings("unchecked") public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService { @@ -195,6 +202,7 @@ order.setPrice(OrderDTO.getPrice()); order.setCoverPic(OrderDTO.getCoverPic()); order.setOrderTimeSx(OrderDTO.getOrderTimeSx()); + order.setGoodsId(OrderDTO.getGoodsId()); this.save(order); @@ -293,7 +301,6 @@ @Override @Synchronized public MemberTiOrderVO saveMemberOrder(MemberOrderDTO memberOrderDTO) { - MemberTiOrderVO memberOrderVO=new MemberTiOrderVO(); BigDecimal pice=new BigDecimal(0); @@ -311,6 +318,10 @@ order.setOrderFrom(OrderFromEnum.GROUP_PURCHASE_ORDERS); 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); @@ -335,6 +346,7 @@ order.setSkuName(goodsSku.getSkuName()); order.setPrice(goodsSku.getPrice()); order.setCoverPic(goodsSku.getCoverPic()); + order.setGoodsId(goodsSku.getId()); } memberOrderVO.setGoodsSkuId(memberOrderDTO.getGoodsSkuId()); memberOrderVO.setPrice(goodsSku.getPrice()); @@ -405,6 +417,7 @@ order.setPrice(data.getSeckillPrice()); order.setCoverPic(goodsSku.getCoverPic()); order.setSjPrice(goodsSku.getPrice()); + order.setGoodsId(goodsSku.getId()); redisService.setCacheObject(CacheConstants.SECKILL_GOODS + data.getId(), surpNum - memberOrderDTO.getGoodsQuantity()); } if (memberOrderDTO.getOrderFrom()==3){ @@ -452,6 +465,39 @@ order.setPrice(data.getGroupPurchasePrice()); order.setCoverPic(goodsSku.getCoverPic()); 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()); @@ -482,6 +528,16 @@ memberOrderVO.setReceiverCity(data.getReceiverCity()); memberOrderVO.setReceiverDetailAddress(data.getDetailedAddress()); memberOrderVO.setReceiverphone(data.getRecipientPhone()); + } else { + order.setReceiverName(memberOrderDTO.getReceiverName()); + order.setReceiverCity(memberOrderDTO.getReceiverCity()); + order.setReceiverDetailAddress(memberOrderDTO.getReceiverDetailAddress()); + order.setReceiverPhone(memberOrderDTO.getReceiverphone()); + + memberOrderVO.setReceiverName(memberOrderDTO.getReceiverName()); + memberOrderVO.setReceiverCity(memberOrderDTO.getReceiverCity()); + memberOrderVO.setReceiverDetailAddress(memberOrderDTO.getReceiverDetailAddress()); + memberOrderVO.setReceiverphone(memberOrderDTO.getReceiverphone()); } order.setGoodsSkuId(memberOrderDTO.getGoodsSkuId()); @@ -556,8 +612,6 @@ memberOrderVO.setCoverPic(goodsSku.getCoverPic()); memberOrderVO.setSkuName(goodsSku.getSkuName()); } - - if (order.getOrderFrom().getCode()==2){ MemberOrderDTO memberOrderDTO1=new MemberOrderDTO(); memberOrderDTO1.setMemberId(order.getMemberId()); @@ -611,8 +665,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(); @@ -642,6 +696,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){ @@ -734,8 +822,7 @@ CustomConfig memberPointsPoints = sysUserClient.getconfig("MEMBER_POINTS_POINTS").getData(); if (pice.doubleValue()>0){ - BigDecimal pic=pice.multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity())); - BigDecimal divide = pic.divide(new BigDecimal(memberPointsMoney.getConfigValue())); + BigDecimal divide = pice.divide(new BigDecimal(memberPointsMoney.getConfigValue())); BigDecimal roundedDown = divide.setScale(0, RoundingMode.DOWN); BigDecimal aDouble= roundedDown.multiply(new BigDecimal(memberPointsPoints.getConfigValue())); order.setPoints(aDouble.intValue()); @@ -804,9 +891,13 @@ PageDTO<MemberOrderListVO> memberOrderListVOPageDTO = PageDTO.of(page1, MemberOrderListVO.class); List<MemberOrderListVO> list = memberOrderListVOPageDTO.getList(); + 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 之后 @@ -847,7 +938,12 @@ } goodsSkuClient.updGoodsSeckill(goodsStockUpdDTO1,SecurityConstants.INNER); } - + // 恢复推荐商品可购数量 + if (MemberOrderList.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) { + promotionClient.addRecommendAvailableNum( + MemberOrderList.getGoodsQuantity(), + MemberOrderList.getGoodsSkuId(), SecurityConstants.INNER); + } this.updateById(order); } @@ -859,7 +955,8 @@ Wrappers.lambdaQuery(OrderReturnRequest.class) .eq(OrderReturnRequest::getOrderId, MemberOrderList.getId()).last("limit 1")); - if (StringUtils.isNotNull(orderReturnRequest)&&orderReturnRequest!=null) { + if (StringUtils.isNotNull(orderReturnRequest) + && orderReturnRequest.getStatus() != ReturnRequestStatusEnum.QX) { MemberOrderList.setStatus(orderReturnRequest.getStatus()); MemberOrderList.setRequestId(orderReturnRequest.getId()); MemberOrderList.setIsRequest(2); @@ -883,46 +980,122 @@ MemberOrderList.setOrderShuoMin(memberPointsPoints.getConfigValue()); CustomConfig ReturnCycle = sysUserClient.getconfig("RETURN_CYCLE").getData(); MemberOrderList.setOrderZq(Integer.valueOf(ReturnCycle.getConfigValue())); + + GoodsSku goodsSku = + Objects.nonNull(goodsUnitMap.get(MemberOrderList.getGoodsId())) + ? goodsUnitMap.get(MemberOrderList.getGoodsId()) + : goodsUnitMap.get(MemberOrderList.getGoodsSkuId()); + if (Objects.nonNull(goodsSku)) { + MemberOrderList.setUnit(goodsSku.getUnit()); + MemberOrderList.setSpec(goodsSku.getSpec()); + MemberOrderList.setSpecUnit(goodsSku.getSpecUnit()); + } } return memberOrderListVOPageDTO; } + @NotNull + private Map<Long, GoodsSku> getGoodsUnitMap(List<MemberOrderListVO> list) { + Map<Long, GoodsSku> goodsSkuMap = new HashedMap(); + Set<Long> goodsSkuIdSet = list.stream() + .filter(vo -> vo.getOrderFrom().equals(OrderFromEnum.COMMODITY_ORDER)) + .map(MemberOrderListVO::getGoodsSkuId) + .collect(Collectors.toSet()); + if (CollUtils.isNotEmpty(goodsSkuIdSet)) { + goodsSkuMap = goodsSkuClient.getGoodsListByIds(goodsSkuIdSet, + SecurityConstants.INNER).getData().stream() + .collect(Collectors.toMap(GoodsSku::getId, Function.identity())); + } + Set<Long> seckillIdSet = list.stream() + .filter(vo -> vo.getOrderFrom().equals(OrderFromEnum.SNAP_ORDERS)) + .map(MemberOrderListVO::getGoodsSkuId) + .collect(Collectors.toSet()); + + if (CollUtils.isNotEmpty(seckillIdSet)) { + Map<Long, GoodsSku> goodsSkuMap2 = goodsSkuClient.getGoodsSkuBySeckillIdSet( + seckillIdSet, + SecurityConstants.INNER).getData().stream() + .collect(Collectors.toMap(GoodsSku::getId, Function.identity())); + // 将goodsSkuMap2合并到goodsSkuMap中 + goodsSkuMap.putAll(goodsSkuMap2); + } + Set<Long> groupPurchaseIdSet = list.stream() + .filter(vo -> vo.getOrderFrom().equals(OrderFromEnum.GROUP_PURCHASE_ORDERS)) + .map(MemberOrderListVO::getGoodsSkuId) + .collect(Collectors.toSet()); + if (CollUtils.isNotEmpty(groupPurchaseIdSet)) { + Map<Long, GoodsSku> goodsSkuMap3 = goodsSkuClient.getGoodsSkuByGroupPurchaseIdSet( + groupPurchaseIdSet, + SecurityConstants.INNER).getData().stream() + .collect(Collectors.toMap(GoodsSku::getId, Function.identity())); + goodsSkuMap.putAll(goodsSkuMap3); + } + Set<Long> auctionGoodsIdSet = list.stream() + .filter(vo -> vo.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS) + && vo.getAuctionOrderType().equals(AuctionOrderTypeEnum.REGULAR_ITEMS)) + .map(MemberOrderListVO::getGoodsSkuId) + .collect(Collectors.toSet()); + if (CollUtils.isNotEmpty(auctionGoodsIdSet)) { + Map<Long, GoodsSku> goodsSkuMap4 = auctionClient.getGoodsSkuByAuctionGoodsIdSet( + auctionGoodsIdSet, + SecurityConstants.INNER).getData().stream() + .collect(Collectors.toMap(GoodsSku::getId, Function.identity())); + goodsSkuMap.putAll(goodsSkuMap4); + } + Set<Long> auctionSalesroomGoodsSet = list.stream() + .filter(vo -> vo.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS) + && vo.getAuctionOrderType().equals(AuctionOrderTypeEnum.AUCTION_ITEMS)) + .map(MemberOrderListVO::getGoodsSkuId) + .collect(Collectors.toSet()); + if (CollUtils.isNotEmpty(auctionSalesroomGoodsSet)) { + Map<Long, GoodsSku> goodsSkuMap5 = auctionClient.getGoodsSkuByAuctionSalesroomGoodsSet( + auctionSalesroomGoodsSet, + SecurityConstants.INNER).getData().stream() + .collect(Collectors.toMap(GoodsSku::getId, Function.identity())); + goodsSkuMap.putAll(goodsSkuMap5); + } + return goodsSkuMap; + } + @Override public OrderVO MemberOrderOne(MemberOrderListDTO memberOrderListDTO) { Order order = baseMapper.selectById(memberOrderListDTO.getId()); OrderVO orderVO=new OrderVO(); - try { - orderVO = BeanUtils.copyBean(order, OrderVO.class); - orderVO.setAuctionType(order.getAuctionOrderType()); - orderVO.setCouponId(order.getCouponId()); - orderVO.setBound(order.getBound()); - orderVO.setIsRequest(order.getIsRequest()); - if (orderVO.getOrderFrom().getCode()==3){ - GoodsGroupPurchase data = GoodsSkuClient.getGoodsSeckiGoodsGroupPurchaseOne(order.getGoodsSkuId(), SecurityConstants.INNER).getData(); - orderVO.setGroupTime(data.getGroupTime()); - orderVO.setSkuId(data.getGoodsSkuId()); - } + orderVO = BeanUtils.copyBean(order, OrderVO.class); + orderVO.setAuctionType(order.getAuctionOrderType()); + orderVO.setCouponId(order.getCouponId()); + orderVO.setBound(order.getBound()); + orderVO.setIsRequest(order.getIsRequest()); + if (orderVO.getOrderFrom().getCode() == 3) { + GoodsGroupPurchase data = GoodsSkuClient.getGoodsSeckiGoodsGroupPurchaseOne( + order.getGoodsSkuId(), SecurityConstants.INNER).getData(); + orderVO.setGroupTime(data.getGroupTime()); + orderVO.setSkuId(data.getGoodsSkuId()); + } - LambdaQueryWrapper<OrderAuctionBond> wrapper3= Wrappers.lambdaQuery(); - wrapper3.eq(OrderAuctionBond::getOrderId,order.getId()); - OrderAuctionBond orderAuctionBond = orderAuctionBondMapper.selectOne(wrapper3); - if (orderAuctionBond!=null){ - if (orderAuctionBond.getBoundStatus().getCode()==1||orderAuctionBond.getBoundStatus().getCode()==2){ - orderVO.setIsAuctionBond(1); - }else{ - orderVO.setIsAuctionBond(2); - } - }else { + LambdaQueryWrapper<OrderAuctionBond> wrapper3 = Wrappers.lambdaQuery(); + wrapper3.eq(OrderAuctionBond::getOrderId, order.getId()); + OrderAuctionBond orderAuctionBond = orderAuctionBondMapper.selectOne(wrapper3); + if (orderAuctionBond != null) { + if (orderAuctionBond.getBoundStatus().getCode() == 1 + || orderAuctionBond.getBoundStatus().getCode() == 2) { orderVO.setIsAuctionBond(1); + } else { + orderVO.setIsAuctionBond(2); } - - } catch (Exception e) { - throw new RuntimeException(e); + } else { + orderVO.setIsAuctionBond(1); } if (order.getTotalAmount()==null){ order.setTotalAmount(new BigDecimal(0)); + } + GoodsSku goodsSku = getGoodsSku(orderVO); + if (Objects.nonNull(goodsSku)) { + orderVO.setUnit(goodsSku.getUnit()); + orderVO.setSpec(goodsSku.getSpec()); + orderVO.setSpecUnit(goodsSku.getSpecUnit()); } CustomConfig memberPointsPoints = sysUserClient.getconfig("MALL_ORDER_DESCRIPTION").getData(); orderVO.setOrderShuoMin(memberPointsPoints.getConfigValue()); @@ -936,6 +1109,51 @@ orderVO.setStatus(orderReturnRequest.getStatus()); } return orderVO; + } + + private GoodsSku getGoodsSku(OrderVO orderVO) { + GoodsSku goodsSku = null; + switch (orderVO.getOrderFrom()) { + case COMMODITY_ORDER: + goodsSku = goodsSkuClient.getGoodsSkuOne(orderVO.getGoodsSkuId(), + SecurityConstants.INNER).getData(); + break; + case SNAP_ORDERS: + List<GoodsSku> skuList = goodsSkuClient.getGoodsSkuBySeckillIdSet( + Sets.newHashSet(orderVO.getGoodsSkuId()), + SecurityConstants.INNER).getData(); + if (CollUtils.isNotEmpty(skuList)) { + goodsSku = skuList.get(0); + } + break; + case GROUP_PURCHASE_ORDERS: + List<GoodsSku> data = goodsSkuClient.getGoodsSkuByGroupPurchaseIdSet( + Sets.newHashSet(orderVO.getGoodsSkuId()), + SecurityConstants.INNER).getData(); + if (CollUtils.isNotEmpty(data)) { + goodsSku = data.get(0); + } + break; + case AUCTION_ORDERS: + List<GoodsSku> goodsSkuList; + if (orderVO.getAuctionType().equals(AuctionOrderTypeEnum.REGULAR_ITEMS)) { + goodsSkuList = auctionClient.getGoodsSkuByAuctionGoodsIdSet( + Sets.newHashSet(orderVO.getGoodsSkuId()), + SecurityConstants.INNER).getData(); + if (CollUtils.isNotEmpty(goodsSkuList)) { + goodsSku = goodsSkuList.get(0); + } + } else { + goodsSkuList = auctionClient.getGoodsSkuByAuctionSalesroomGoodsSet( + Sets.newHashSet(orderVO.getGoodsSkuId()), + SecurityConstants.INNER).getData(); + } + if (CollUtils.isNotEmpty(goodsSkuList)) { + goodsSku = goodsSkuList.get(0); + } + break; + } + return goodsSku; } @Override @@ -978,6 +1196,12 @@ goodsStockUpdDTO1.setSoldQuantity(data.getSoldQuantity()-order.getGoodsQuantity()); } goodsSkuClient.updGoodsSeckill(goodsStockUpdDTO1,SecurityConstants.INNER); + if (data.getStartStatus().equals(StartStatusEnum.ENDED)) { + GoodsStockUpdDTO dto = new GoodsStockUpdDTO(); + dto.setGoodsSkuId(data.getGoodsSkuId()); + dto.setAuctionStock(order.getGoodsQuantity()); + goodsSkuClient.updGoodsStock(Lists.newArrayList(dto), SecurityConstants.INNER); + } } @@ -991,6 +1215,11 @@ GoodsSkuClient.updgoodsGroupPurchaseInfo1(goodsSeckiGoodsGroupPurchaseInfo, SecurityConstants.INNER); } + } + // 恢复可购数量 + if (order.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) { + promotionClient.addRecommendAvailableNum( + order.getGoodsQuantity(), order.getGoodsSkuId(), SecurityConstants.INNER); } } @@ -1035,7 +1264,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()); @@ -1051,6 +1284,12 @@ MembeOneDTO.setTotalPoints(order.getPoints()); memberClient.updMembeOne(MembeOneDTO, SecurityConstants.INNER); + MemberPointsDTO memberPointsDTO = new MemberPointsDTO(); + memberPointsDTO.setMemberId(order.getMemberId()); + memberPointsDTO.setPointsType(2); + memberPointsDTO.setPointsStatus(PointStatusEnum.REDUCE); + memberPointsDTO.setPoints(order.getPoints()); + memberClient.addMemberPoints(memberPointsDTO); if (order.getPaymentMethod() != null && order.getPaymentMethod().getCode() == 2) {//支付宝 //获取支付信息 @@ -1088,6 +1327,9 @@ } } } + if (order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS)) { + refundBond(order); + } } @Override @@ -1095,7 +1337,7 @@ Order byId = this.getById(memberOrderListDTO.getId()); - if(byId.getOrderNo().contains("TG")){ + if (byId.getOrderNo().contains("TG") && StringUtils.isNotBlank(byId.getGroupNo())) { GoodsGroupPurchaseInfo goodsSeckiGoodsGroupPurchaseInfo = GoodsSkuClient.getGoodsSeckiGoodsGroupPurchaseInfo2(byId.getGroupNo(), SecurityConstants.INNER).getData(); if (goodsSeckiGoodsGroupPurchaseInfo!=null){ goodsSeckiGoodsGroupPurchaseInfo.setPurchaseNum(byId.getGoodsQuantity()); @@ -1166,48 +1408,59 @@ }else{ } - LambdaQueryWrapper<OrderAuctionBond> wrapper= Wrappers.lambdaQuery(); - wrapper.eq(OrderAuctionBond::getOrderId,order.getId()); - OrderAuctionBond orderAuctionBond = orderAuctionBondMapper.selectOne(wrapper); - if(orderAuctionBond!=null){ - if (order.getPaymentMethod() != null && order.getPaymentMethod().getCode() == 2) {//支付宝 - //获取支付信息 - LambdaQueryWrapper<Paylog> paylogEntityWrapper = Wrappers.lambdaQuery(); - paylogEntityWrapper.eq(Paylog::getOutTradeNo, orderAuctionBond.getOrderNo()); - Paylog paylog = iPaylogService.getOne(paylogEntityWrapper); - boolean bo = paylogService.refundForAlipay(paylog.getOutTradeNo(), paylog.getTradeNo(), paylog.getPayMoney()); - if (!bo) { - System.out.println("支付宝退款失败"); - } - } else if (order.getPaymentMethod() != null && order.getPaymentMethod().getCode() == 1) {//微信 - //获取支付信息 - LambdaQueryWrapper<Paylog> paylogEntityWrapper = Wrappers.lambdaQuery(); - paylogEntityWrapper.eq(Paylog::getOutTradeNo, orderAuctionBond.getOrderNo()); - Paylog paylog = iPaylogService.getOne(paylogEntityWrapper); - - String refundMoney = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d); - Integer refundFee = Integer.parseInt(refundMoney.substring(0, refundMoney.length() - 3)); - String money = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d); - Integer totalFee = Integer.parseInt(money.substring(0, money.length() - 3)); - refundFee = 1; - - String regEx = "[^0-9]"; - Pattern p = Pattern.compile(regEx); - Matcher m = p.matcher(order.getOrderNo()); - String ma = m.replaceAll("").trim(); - boolean bo = paylogService.refundForWxpay(4, paylog.getTradeNo(), paylog.getOutTradeNo(), "R" + ma, totalFee, refundFee, "2"); - if (!bo) { - System.out.println("微信退款失败"); - } - } - } - - - - }else{ + refundBond(order); + } else { order.setOrderStatus(OrderStatusEnum.FINISHED); order.setReceiveTime(LocalDateTime.now()); baseMapper.updateById(order); + } + } + + private void refundBond(Order order) { + LambdaQueryWrapper<OrderAuctionBond> wrapper = Wrappers.lambdaQuery(); + wrapper.eq(order.getAuctionOrderType().equals(AuctionOrderTypeEnum.AUCTION_ITEMS), + OrderAuctionBond::getAuctionSalesroomId, order.getAuctionSalesroomId()); + wrapper.eq(order.getAuctionOrderType().equals(AuctionOrderTypeEnum.REGULAR_ITEMS), + OrderAuctionBond::getAuctionGoodsId, order.getGoodsSkuId()); + wrapper.eq(OrderAuctionBond::getMemberId, order.getMemberId()); + wrapper.eq(OrderAuctionBond::getBoundStatus, BondStatusEnum.PAID); + OrderAuctionBond orderAuctionBond = orderAuctionBondMapper.selectOne(wrapper); + if (orderAuctionBond != null && orderAuctionBond.getBond() != null) { + if (order.getPaymentMethod() != null && order.getPaymentMethod().getCode() == 2) {// 支付宝 + // 获取支付信息 + LambdaQueryWrapper<Paylog> paylogEntityWrapper = Wrappers.lambdaQuery(); + paylogEntityWrapper.eq(Paylog::getOutTradeNo, orderAuctionBond.getOrderNo()); + Paylog paylog = iPaylogService.getOne(paylogEntityWrapper); + boolean bo = paylogService.refundForAlipay(paylog.getOutTradeNo(), + paylog.getTradeNo(), paylog.getPayMoney()); + if (!bo) { + System.out.println("支付宝退款失败"); + } else { + orderAuctionBond.setBoundStatus(BondStatusEnum.REFUNDED); + } + } else if (order.getPaymentMethod() != null + && order.getPaymentMethod().getCode() == 1) {// 微信 + // 获取支付信息 + LambdaQueryWrapper<Paylog> paylogEntityWrapper = Wrappers.lambdaQuery(); + paylogEntityWrapper.eq(Paylog::getOutTradeNo, orderAuctionBond.getOrderNo()); + Paylog paylog = iPaylogService.getOne(paylogEntityWrapper); + + String refundMoney = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d); + Integer refundFee = Integer.parseInt( + refundMoney.substring(0, refundMoney.length() - 3)); + String money = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d); + Integer totalFee = Integer.parseInt(money.substring(0, money.length() - 3)); + refundFee = 1; + String refundNo = OrderUtil.getOrderNoForPrefix("R"); + boolean bo = paylogService.refundForWxpay(4, paylog.getTradeNo(), + paylog.getOutTradeNo(), refundNo, totalFee, refundFee, "2"); + if (!bo) { + System.out.println("微信退款失败"); + } else { + orderAuctionBond.setBoundStatus(BondStatusEnum.REFUNDED); + } + } + orderAuctionBondMapper.updateById(orderAuctionBond); } } @@ -1241,16 +1494,21 @@ if(order.getOrderNo().contains("SP")){ GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(order.getGoodsSkuId(), SecurityConstants.INNER).getData(); - GoodsStockUpdDTO goodsStockUpdDTO1 = new GoodsStockUpdDTO(); - goodsStockUpdDTO1.setGoodsSkuId(order.getGoodsSkuId()); - goodsStockUpdDTO1.setAuctionStock(goodsSku.getStock()+order.getGoodsQuantity()); - if (goodsSku.getSoldQuantity()-order.getGoodsQuantity()<0){ - goodsStockUpdDTO1.setSoldQuantity(0); - }else { - goodsStockUpdDTO1.setSoldQuantity(goodsSku.getSoldQuantity()-order.getGoodsQuantity()); - } + if (Objects.nonNull(goodsSku)) { + GoodsStockUpdDTO goodsStockUpdDTO1 = new GoodsStockUpdDTO(); + goodsStockUpdDTO1.setGoodsSkuId(order.getGoodsSkuId()); + goodsStockUpdDTO1.setAuctionStock( + goodsSku.getStock() + order.getGoodsQuantity()); + if (goodsSku.getSoldQuantity() - order.getGoodsQuantity() < 0) { + goodsStockUpdDTO1.setSoldQuantity(0); + } else { + goodsStockUpdDTO1.setSoldQuantity( + goodsSku.getSoldQuantity() - order.getGoodsQuantity()); + } - goodsSkuClient.updGoodsStock1(goodsStockUpdDTO1,SecurityConstants.INNER); + goodsSkuClient.updGoodsStock1(goodsStockUpdDTO1, + SecurityConstants.INNER); + } } if(order.getOrderNo().contains("MS")){ @@ -1607,6 +1865,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); @@ -1730,12 +1989,9 @@ refundMoney.substring(0, refundMoney.length() - 3)); String money = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100D); Integer totalFee = Integer.parseInt(money.substring(0, money.length() - 3)); - String regEx = "[^0-9]"; - Pattern p = Pattern.compile(regEx); - Matcher m = p.matcher(orderNo); - String ma = m.replaceAll("").trim(); + String refundNo = OrderUtil.getOrderNoForPrefix("R"); result = paylogService.refundForWxpay(2, paylog.getTradeNo(), - paylog.getOutTradeNo(), "R" + ma, totalFee, refundFee, "4"); + paylog.getOutTradeNo(), refundNo, totalFee, refundFee, "4"); } else if (paymentMethod == PaymentMethodEnum.ALIPAY) { result = paylogService.refundForAlipay(paylog.getOutTradeNo(), paylog.getTradeNo(), paylog.getPayMoney()); @@ -1811,17 +2067,21 @@ .eq(OrderAuctionBond::getBoundStatus, BondStatusEnum.PAID)); } if (StringUtils.isNotNull(orderAuctionBond)) { - Paylog paylog = iPaylogService.lambdaQuery() + Optional<Paylog> paylogOpt = iPaylogService.lambdaQuery() .in(Paylog::getOutTradeNo, orderAuctionBond.getOrderNo()) - .one(); - boolean result = handleRefund(orderAuctionBond.getPaymentMethod(), paylog, - orderAuctionBond.getOrderNo()); - if (result) { - paylog.setState(3);// 已退款 - orderAuctionBond.setBoundStatus(BondStatusEnum.REFUNDED); - iPaylogService.updateById(paylog); - orderAuctionBondMapper.updateById(orderAuctionBond); + .oneOpt(); + if (paylogOpt.isPresent()) { + Paylog paylog = paylogOpt.get(); + boolean result = handleRefund(orderAuctionBond.getPaymentMethod(), paylog, + orderAuctionBond.getOrderNo()); + if (result) { + paylog.setState(3);// 已退款 + orderAuctionBond.setBoundStatus(BondStatusEnum.REFUNDED); + iPaylogService.updateById(paylog); + orderAuctionBondMapper.updateById(orderAuctionBond); + } } + } } @@ -1851,9 +2111,11 @@ @Override public void updateOrderStatusByMubres1(String formedGroupMubres) { + LambdaQueryWrapper<Order> wrapper = Wrappers.lambdaQuery(); wrapper.eq(Order::getGroupNo, formedGroupMubres); List<Order> page1 = this.list(wrapper); + log.info("开始更新订单,已成团的团购订单:{}", page1); for (Order p:page1){ p.setIsOrder(1); this.updateById(p); @@ -1868,4 +2130,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