From fc8b51f40e71aa09bb49f407c1e9f68ac94ceb58 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期一, 29 七月 2024 18:51:32 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java | 155 +++++++++++++++++++++++++++++---------------------- 1 files changed, 87 insertions(+), 68 deletions(-) diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java index e900f48..a279095 100644 --- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java +++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.enums.ListingStatusEnum; +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; @@ -35,13 +36,13 @@ import com.ruoyi.system.api.domain.GoodsSeckill; import com.ruoyi.system.api.domain.GoodsSeries; import com.ruoyi.system.api.domain.GoodsSku; +import com.ruoyi.system.api.domain.Order; import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO; import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO; import com.ruoyi.system.api.domain.dto.ListStatusDTO; import com.ruoyi.system.api.domain.vo.GoodsInfoTitleValueVO; import com.ruoyi.system.api.domain.vo.HomeGoodsSkuInfoVO; import com.ruoyi.system.api.domain.vo.HomeGoodsSkuListVO; -import com.ruoyi.system.api.domain.vo.OrderVO; import com.ruoyi.system.api.domain.vo.getHomeGoodsSkuXxiVO; import com.ruoyi.system.api.feignClient.GoodsSkuClient; import com.ruoyi.system.api.feignClient.OrderClient; @@ -52,7 +53,6 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; -import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -195,14 +195,16 @@ Page<GoodsSku> page = this.lambdaQuery() .select(GoodsSku::getId, GoodsSku::getSkuName, GoodsSku::getPrice, GoodsSku::getStock, GoodsSku::getSoldQuantity, GoodsSku::getSortNum, - GoodsSku::getListingStatus) + GoodsSku::getListingStatus, GoodsSku::getUnit, GoodsSku::getSpec, + GoodsSku::getSpecUnit) .like(StringUtils.isNotEmpty(query.getSkuName()), GoodsSku::getSkuName, query.getSkuName()) .eq(StringUtils.isNotNull(query.getListingStatus() ), GoodsSku::getListingStatus, query.getListingStatus()) .eq(query.getQueryType().equals(1), GoodsSku::getListingStatus, ListingStatusEnum.ON_SHELVES) - .orderByDesc(GoodsSku::getSortNum) + .gt(query.getQueryType().equals(1), GoodsSku::getStock, 0) + .orderByDesc(GoodsSku::getCreateTime) .page(new Page<>(query.getPageCurr(), query.getPageSize())); return PageDTO.of(page, GoodsSkuVO.class); } @@ -231,20 +233,25 @@ .eq(GoodsSeckill::getGoodsSkuId, dto.getId()); List<GoodsSeckill> goodsSeckillList = goodsSeckillMapper.selectList(queryWrapper); if (StringUtils.isNotNull(goodsSeckillList)) { - for (GoodsSeckill goodsSeckill : goodsSeckillList) { + goodsSeckillList = goodsSeckillList.stream().peek(goodsSeckill -> { goodsSeckill.setListingStatus(ListingStatusEnum.REMOVED_FROM_THE_SHELF); - goodsSeckillMapper.updateById(goodsSeckill); - } + }).collect(Collectors.toList()); + goodsSeckillMapper.updateListingStatusBatch( + ListingStatusEnum.REMOVED_FROM_THE_SHELF.getCode(), goodsSeckillList); } LambdaQueryWrapper<GoodsGroupPurchase> queryWrapper1 =new LambdaQueryWrapper<>(); queryWrapper1.eq(GoodsGroupPurchase::getListingStatus, ListingStatusEnum.ON_SHELVES) .eq(GoodsGroupPurchase::getGoodsSkuId, dto.getId()); - GoodsGroupPurchase goodsGroupPurchase = goodsGroupPurchaseMapper.selectOne(queryWrapper1); - if (StringUtils.isNotNull(goodsGroupPurchase)) { - goodsGroupPurchase.setListingStatus(ListingStatusEnum.REMOVED_FROM_THE_SHELF); - goodsGroupPurchaseMapper.updateById(goodsGroupPurchase); + List<GoodsGroupPurchase> goodsGroupPurchaseList = goodsGroupPurchaseMapper.selectList( + queryWrapper1); + if (CollUtils.isNotEmpty(goodsGroupPurchaseList)) { + goodsGroupPurchaseList = goodsGroupPurchaseList.stream().peek(goodsGroupPurchase -> { + goodsGroupPurchase.setListingStatus(ListingStatusEnum.REMOVED_FROM_THE_SHELF); + }).collect(Collectors.toList()); + goodsGroupPurchaseMapper.updateListingStatusBatch( + ListingStatusEnum.REMOVED_FROM_THE_SHELF.getCode(), goodsGroupPurchaseList); } } @@ -271,44 +278,24 @@ @Transactional(propagation = Propagation.REQUIRES_NEW) public void updGoodsStock(List<GoodsStockUpdDTO> goodsStockUpdDTOS) { log.info("开始批量更新商品库存"); - List<Long> goodsSkuIdList = goodsStockUpdDTOS.stream() - .map(GoodsStockUpdDTO::getGoodsSkuId) - .collect(Collectors.toList()); - List<GoodsSku> goodsSkus = this.listByIds(goodsSkuIdList); - - if (StringUtils.isEmpty(goodsSkus)) { - throw new ServiceException("商品不存在"); - } - Map<Long, Integer> stockMap = goodsStockUpdDTOS.stream() - .collect(Collectors.toMap(GoodsStockUpdDTO::getGoodsSkuId, - GoodsStockUpdDTO::getAuctionStock)); - for (GoodsSku skus : goodsSkus) { - String goodsLock = "goods_lock:" + skus.getId(); - RLock redissonLock = redissonClient.getLock(goodsLock); - try { - redissonLock.lock(30, TimeUnit.SECONDS); - Integer auctionStock = stockMap.get(skus.getId()); - if (StringUtils.isNotNull(auctionStock)) { - // 更新商品库存,更新五次失败抛出异常 - boolean isUpdated = false; - for (int i = 0; i < 5; i++) { - isUpdated = updateGoodsStock(skus, auctionStock); - if (isUpdated) { - break; - } else { - skus = this.getById(skus.getId()); - } - } - if (!isUpdated) { - throw new ServiceException("商品库存回退失败"); - } - } - } finally { - redissonLock.unlock(); - } + for (GoodsStockUpdDTO goodsStockUpdDTO : goodsStockUpdDTOS) { + updateGoodsStock(goodsStockUpdDTO.getGoodsSkuId(), + goodsStockUpdDTO.getAuctionStock()); } log.info("批量更新商品库存结束"); } + + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void updGoodsStock1(GoodsStockUpdDTO goodsStockUpdDTOS) { + GoodsSku goodsSkus = this.getById(goodsStockUpdDTOS.getGoodsSkuId()); + goodsSkus.setStock(goodsStockUpdDTOS.getAuctionStock()); + goodsSkus.setSoldQuantity(goodsStockUpdDTOS.getSoldQuantity()); + this.updateById(goodsSkus); + + } + @Override public PageDTO<HomeGoodsSkuListVO> getHomeGoodsSkuVOList(HomeGoodsSkuDTO homeGoodsSkuDTO) { @@ -319,7 +306,12 @@ LambdaQueryWrapper<GoodsSku> wrapper3= Wrappers.lambdaQuery(); wrapper3.eq(GoodsSku::getDelFlag,0); wrapper3.eq(GoodsSku::getListingStatus,0); - if (homeGoodsSkuDTO.getSkuName()!=null){ + // if(homeGoodsSkuDTO.getId()!=null){ + // List arr=new ArrayList<>(); + // arr.add(homeGoodsSkuDTO.getId()); + // wrapper3.notIn(GoodsSku::getId,arr); + // } + if (homeGoodsSkuDTO.getSkuName()!=null&&homeGoodsSkuDTO.getSkuName()!=""){ wrapper3.like(GoodsSku::getSkuName,homeGoodsSkuDTO.getSkuName()); } if (homeGoodsSkuDTO.getGoodsSkuId()!=null){ @@ -401,7 +393,10 @@ wrapper3.le(GoodsSku::getYears, parseTime7) .ge(GoodsSku::getYears, parseTime15); } - wrapper3.orderByAsc(GoodsSku::getSortNum); + wrapper3.orderByDesc(GoodsSku::getCreateTime); + wrapper3.last(",IF(isnull(sort_num),1,0), sort_num DESC"); + + Page<GoodsSku> page1 = this.page(page, wrapper3); PageDTO<HomeGoodsSkuListVO> articleCommentsVOPageDTO = PageDTO.of(page1, HomeGoodsSkuListVO.class); return articleCommentsVOPageDTO; @@ -439,6 +434,7 @@ homeGoodsSkuInfoVO.setCoverPic(byId.getCoverPic()); homeGoodsSkuInfoVO.setAlbum(byId.getAlbum()); homeGoodsSkuInfoVO.setDescription(byId.getDescription()); + homeGoodsSkuInfoVO.setStock(byId.getStock()); homeGoodsSkuInfoVO.setDetail(byId.getDetail()); homeGoodsSkuInfoVO.setShareTitle(byId.getShareTitle()); homeGoodsSkuInfoVO.setSharePic(byId.getSharePic()); @@ -446,14 +442,16 @@ LambdaQueryWrapper<GoodsGroupPurchase> queryWrapper1 =new LambdaQueryWrapper<>(); queryWrapper1.eq(GoodsGroupPurchase::getListingStatus, ListingStatusEnum.ON_SHELVES) - .eq(GoodsGroupPurchase::getGoodsSkuId, byId.getId()); + .eq(GoodsGroupPurchase::getGoodsSkuId, byId.getId()) + .eq(GoodsGroupPurchase::getStartStatus, + StartStatusEnum.STARTED); GoodsGroupPurchase goodsGroupPurchase = goodsGroupPurchaseMapper.selectOne(queryWrapper1); if(goodsGroupPurchase!=null){ HomeGoodsSkuDTO homeGoodsSkuDTO1 =new HomeGoodsSkuDTO(); homeGoodsSkuDTO1.setGoodsSkuId(goodsGroupPurchase.getId()); homeGoodsSkuDTO1.setMemberId(homeGoodsSkuDTO.getMemberId()); - List<OrderVO> data4 = orderClient.getOrderByGroupPurchaseMemberList(homeGoodsSkuDTO1, SecurityConstants.INNER).getData(); - if (data4.size()>0){ + Order data4 = orderClient.getOrderByGroupPurchaseMemberId2(homeGoodsSkuDTO1, SecurityConstants.INNER).getData(); + if (data4!=null){ homeGoodsSkuInfoVO.setIsGoodsGroupPurchase(2); }else{ homeGoodsSkuInfoVO.setIsGoodsGroupPurchase(1); @@ -475,10 +473,13 @@ }else{ homeGoodsSkuInfoVO.setIsCollection(1); } + List list1=new ArrayList<>(); + list1.add(0); + list1.add(1); LambdaQueryWrapper<GoodsGroupPurchase> queryWrapper2 =new LambdaQueryWrapper<>(); queryWrapper2.eq(GoodsGroupPurchase::getListingStatus, ListingStatusEnum.ON_SHELVES) - .eq(GoodsGroupPurchase::getGoodsSkuId, byId.getId()); + .eq(GoodsGroupPurchase::getGoodsSkuId, byId.getId()).in(GoodsGroupPurchase::getStartStatus, list1); GoodsGroupPurchase goodsGroupPurchase2 = goodsGroupPurchaseMapper.selectOne(queryWrapper2); if (goodsGroupPurchase2!=null){ homeGoodsSkuInfoVO.setGroupPurchaseGoods(2); @@ -492,10 +493,10 @@ wrapper4.eq(GoodsBrowseRecord::getDelFlag,0); wrapper4.eq(GoodsBrowseRecord::getGoodsSkuId,homeGoodsSkuDTO.getGoodsSkuId()); wrapper4.eq(GoodsBrowseRecord::getMemberId,homeGoodsSkuDTO.getMemberId()); - wrapper4.ge(GoodsBrowseRecord::getCreateTime, now) - .le(GoodsBrowseRecord::getCreateTime, newTime7); - List<GoodsBrowseRecord> list1 = iGoodsBrowseRecordService.list(wrapper4); - if (list1.size()==0){ + wrapper4.ge(GoodsBrowseRecord::getCreateTime, newTime7) + .le(GoodsBrowseRecord::getCreateTime,now ); + List<GoodsBrowseRecord> list2 = iGoodsBrowseRecordService.list(wrapper4); + if (list2.size()==0){ GoodsBrowseRecord auctionBrowseRecord=new GoodsBrowseRecord(); auctionBrowseRecord.setMemberId(homeGoodsSkuDTO.getMemberId()); auctionBrowseRecord.setGoodsSkuId(homeGoodsSkuDTO.getGoodsSkuId()); @@ -543,14 +544,24 @@ } List<GoodsInfoTitleValueVO> goodsInfoTitleValueVOList = goodsInfoTitleValueService.listByGoodsId(homeGoodsSkuDTO.getGoodsSkuId()); - Collections.sort(goodsInfoTitleValueVOList, Comparator.comparingInt(GoodsInfoTitleValueVO::getSortNum)); - for (GoodsInfoTitleValueVO goodsInfoTitleValueVO:goodsInfoTitleValueVOList){ + List<getHomeGoodsSkuXxiVO> homeGoodsSkuXxiVOS1=new ArrayList<>(); + for (int i=0;i<goodsInfoTitleValueVOList.size();i++){ getHomeGoodsSkuXxiVO getHomeGoodsSkuXxiVOs=new getHomeGoodsSkuXxiVO(); - getHomeGoodsSkuXxiVOs.setContent(goodsInfoTitleValueVO.getContent()); - getHomeGoodsSkuXxiVOs.setTitleName(goodsInfoTitleValueVO.getTitleName()); - homeGoodsSkuXxiVOS.add(getHomeGoodsSkuXxiVOs); + getHomeGoodsSkuXxiVOs.setContent(goodsInfoTitleValueVOList.get(i).getContent()); + getHomeGoodsSkuXxiVOs.setTitleName(goodsInfoTitleValueVOList.get(i).getTitleName()); + if (goodsInfoTitleValueVOList.get(i).getSortNum()!=null){ + getHomeGoodsSkuXxiVOs.setNum(goodsInfoTitleValueVOList.get(i).getSortNum()); + }else{ + getHomeGoodsSkuXxiVOs.setNum(i+1); + } + + + homeGoodsSkuXxiVOS1.add(getHomeGoodsSkuXxiVOs); } + + homeGoodsSkuXxiVOS1.sort((o1, o2) -> Integer.compare(o2.getNum(),o1.getNum())); + homeGoodsSkuXxiVOS.addAll(homeGoodsSkuXxiVOS1); return homeGoodsSkuXxiVOS; } @@ -603,13 +614,21 @@ return homeGoodsSkuXxiVOS; } - private boolean updateGoodsStock(GoodsSku skus, Integer auctionStock) { - return this.lambdaUpdate() - .set(skus.getStock() + auctionStock > 0, GoodsSku::getStock, - skus.getStock() + auctionStock) - .eq(GoodsSku::getId, skus.getId()) - .eq(GoodsSku::getStock, skus.getStock()) - .update(); + private void updateGoodsStock(Long goodsSkuId, Integer auctionStock) { + String goodsLock = "goods_lock:" + goodsSkuId; + RLock redissonLock = redissonClient.getLock(goodsLock); + try { + redissonLock.lock(30, TimeUnit.SECONDS); + // 加库存 + if (auctionStock > 0) { + this.baseMapper.addGoodsStock(goodsSkuId, auctionStock); + } else { + // 减库存 + this.baseMapper.subGoodsStock(goodsSkuId, auctionStock * -1); + } + } finally { + redissonLock.unlock(); + } } /** -- Gitblit v1.7.1