From a6c9fc0dbac21189c205c01b8f824f430a727e9f Mon Sep 17 00:00:00 2001 From: liyj <1617420630@qq.com> Date: Thu, 31 Jul 2025 18:21:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E8=A7=84=E6=A0=BC=E5=88=87?= =?UTF-8?q?=E5=88=86=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ShopBaseProductSpecService.java | 3 +- .../impl/ShopBaseProductSpecServiceImpl.java | 29 ++++---------- .../product/mapper/ShopProductItemMapper.java | 3 ++ .../service/ShopProductBaseService.java | 3 +- .../service/ShopProductItemService.java | 2 + .../service/ShopProductSpecItemService.java | 1 - .../impl/ShopProductBaseServiceImpl.java | 8 ++-- .../impl/ShopProductItemServiceImpl.java | 5 +++ .../impl/ShopProductSpecItemServiceImpl.java | 19 ++------- .../impl/ProductMappingServiceImpl.java | 40 +++++++++++-------- .../service/impl/SyncBaseThirdSxAbstract.java | 6 +-- .../impl/SyncThirdDataServiceImpl.java | 17 ++++---- .../mapper/product/ShopProductItemMapper.xml | 12 ++++++ 13 files changed, 72 insertions(+), 76 deletions(-) diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/base/service/ShopBaseProductSpecService.java b/mall-shop/src/main/java/com/suisung/mall/shop/base/service/ShopBaseProductSpecService.java index bc8f7007..d6d76a9f 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/base/service/ShopBaseProductSpecService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/base/service/ShopBaseProductSpecService.java @@ -21,7 +21,6 @@ public interface ShopBaseProductSpecService extends IBaseService getSpecsByIds(String type_spec_ids, Integer store_id); - Map getShopBaseProductSpecMap(Integer store_id); + Map getShopBaseProductSpecMap(Integer store_id); - void clearShopBaseProductSpecMap(Integer store_id); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseProductSpecServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseProductSpecServiceImpl.java index b68c70e4..4a41eac4 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseProductSpecServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseProductSpecServiceImpl.java @@ -92,28 +92,15 @@ public class ShopBaseProductSpecServiceImpl extends BaseServiceImpl(); - String redisKey=RedisKey.STOREDATASHOPBASEPRODUCTSPEC+":"+store_id; - if(null!=redisService.get(redisKey)){ - map= (Map) redisService.get(redisKey); - }else { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("store_id",store_id); - List shopBaseProductSpecList=this.list(queryWrapper); - for(ShopBaseProductSpec spec:shopBaseProductSpecList){ - map.put(String.valueOf(spec.getSpec_category_id()),spec); - } - if (CollUtil.isNotEmpty(map)) redisService.set(redisKey, map, 60 * 60); + public Map getShopBaseProductSpecMap(Integer store_id) { + Map map=new HashMap<>(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("store_id",store_id); + List shopBaseProductSpecList=this.list(queryWrapper); + for(ShopBaseProductSpec spec:shopBaseProductSpecList){ + map.put(String.valueOf(spec.getSpec_category_id()),spec); } return map; } - - @Override - public void clearShopBaseProductSpecMap(Integer store_id) { - String redisKey=RedisKey.STOREDATASHOPBASEPRODUCTSPEC+":"+store_id; - if(null!=redisService.get(redisKey)){ - redisService.del(redisKey); - } - } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/product/mapper/ShopProductItemMapper.java b/mall-shop/src/main/java/com/suisung/mall/shop/product/mapper/ShopProductItemMapper.java index 67ea4123..5b939ba6 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/product/mapper/ShopProductItemMapper.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/product/mapper/ShopProductItemMapper.java @@ -33,4 +33,7 @@ public interface ShopProductItemMapper extends BaseMapper { int lockSkuStock(@Param("item_id") Long itemId, @Param("cart_quantity") int cart_quantity); void updateBatchByProductId(List list,Integer itemEnable); + + + List getLimitFirstByProductId(@Param("productIds") List productIds); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/ShopProductBaseService.java b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/ShopProductBaseService.java index c5f7c8b1..34927f11 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/ShopProductBaseService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/ShopProductBaseService.java @@ -290,8 +290,7 @@ public interface ShopProductBaseService extends IBaseService { List shopProductInfoList, List> shopProductItemList, List shopProductImageList, List shopProductValidPeriodList, - List shopProductAssistIndexList,String priorityMode, - Map shopProductSpecItemMap,Map ShopBaseProductSpecMap, Map productMappingMap,boolean isUpdatePrice); + List shopProductAssistIndexList); /** * 加载商品 diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/ShopProductItemService.java b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/ShopProductItemService.java index 2aa13002..2bc3d1ae 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/ShopProductItemService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/ShopProductItemService.java @@ -92,4 +92,6 @@ public interface ShopProductItemService extends IBaseService { * @param: ShopProductItem */ CommonResult editQuantity(List shopProductItemList); + + List getLimitFirstByProductId(List productIds); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/ShopProductSpecItemService.java b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/ShopProductSpecItemService.java index d8659815..7a2bb639 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/ShopProductSpecItemService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/ShopProductSpecItemService.java @@ -21,5 +21,4 @@ public interface ShopProductSpecItemService extends IBaseService getExistItem(Integer storeId); - void clearExistItem(Integer storeId); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java index 1cfb0db0..1e30364a 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductBaseServiceImpl.java @@ -5313,8 +5313,7 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl shopProductDataList, List shopProductDetailList, List shopProductInfoList, List> shopProductItemList, List shopProductImageList, List shopProductValidPeriodList, - List shopProductAssistIndexList, String priorityMode,Map shopProductSpecItemMap, - Map ShopBaseProductSpecMap, Map productMappingMap,boolean isUpdatePrice) { + List shopProductAssistIndexList) { // 1. 参数校验 if (shopProductBaseList == null || shopProductBaseList.isEmpty()) { @@ -5467,7 +5466,7 @@ public class ShopProductBaseServiceImpl extends BaseServiceImpl> newShopProductItemList, List> udpateShopProductItemList, List newShopProductImageList, List udpteShopProductImageList, List newShopProductValidPeriodList, List updateShopProductValidPeriodList, - List newShopProductAssistIndexList, List udpateShopProductAssistIndexList, - String priorityMode,Map shopProductSpecItemMap,Map ShopBaseProductSpecMap, Map productMappingMap,boolean isUpdatePrice + List newShopProductAssistIndexList, List udpateShopProductAssistIndexList ) { TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductItemServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductItemServiceImpl.java index 075c76de..175ea9f1 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductItemServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductItemServiceImpl.java @@ -2389,4 +2389,9 @@ public class ShopProductItemServiceImpl extends BaseServiceImpl getLimitFirstByProductId(List productIds) { + return shopProductItemMapper.getLimitFirstByProductId(productIds); + } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductSpecItemServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductSpecItemServiceImpl.java index 07bc3881..6b85ccab 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductSpecItemServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/product/service/impl/ShopProductSpecItemServiceImpl.java @@ -35,31 +35,18 @@ public class ShopProductSpecItemServiceImpl extends BaseServiceImpl(); - String redisKey=RedisKey.STOREDATAPRODUCTSPECITEM+"storeId:"+storeId; - if(null!=redisService.get(redisKey)){ - map=(Map)redisService.get(redisKey); - return map; - } + public Map getExistItem(Integer storeId) { + Map map=new HashMap<>(); + QueryWrapper queryWrapper=new QueryWrapper<>(); queryWrapper.eq("store_id",storeId); List list= list(queryWrapper); for(ShopProductSpecItem shopProductSpecItem:list){ map.put(shopProductSpecItem.getSpec_item_name(),shopProductSpecItem.getSpec_item_id()); } - if (CollUtil.isNotEmpty(map)) redisService.set(redisKey, map, 60 * 60); return map; } - @Override - public void clearExistItem(Integer storeId) { - String redisKey=RedisKey.STOREDATAPRODUCTSPECITEM+"storeId:"+storeId; - if(null!=redisService.get(redisKey)){ - redisService.del(redisKey); - } - } - } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/ProductMappingServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/ProductMappingServiceImpl.java index 439cf42a..9124d8a1 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/ProductMappingServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/ProductMappingServiceImpl.java @@ -139,8 +139,8 @@ public class ProductMappingServiceImpl extends BaseServiceImpl getProductMapping(Integer storeId) { + Map map=new HashMap<>(); QueryWrapper queryWrapper= new QueryWrapper<>(); //queryWrapper.eq("store_id", storeId); queryWrapper.and(m->m.eq("store_id",storeId).or().eq("store_id",0)).orderByDesc("sort_order"); @@ -302,17 +302,25 @@ public class ProductMappingServiceImpl extends BaseServiceImpl query = new QueryWrapper<>(); - query.select("product_id", "store_id", "item_id","item_unit_price","item_unit_price","item_market_price","category_id"); - - // 构建OR条件 (store_id=X AND product_number=Y) OR (store_id=A AND product_number=B)... - shopProductBaseList.forEach(base -> { - query.or(q -> q.eq("store_id", base.getStore_id()) - .eq("product_id", base.getProduct_id())); - }); - query.orderByAsc("product_id"); - return shopProductItemService.list(query); +// // 使用IN查询优化(根据数据库特性可能需要分批) +// QueryWrapper query = new QueryWrapper<>(); +// query.select("product_id", "store_id", "item_id","item_unit_price","item_unit_price","item_market_price","category_id"); +// +// // 构建OR条件 (store_id=X AND product_number=Y) OR (store_id=A AND product_number=B)... +// shopProductBaseList.forEach(base -> { +// query.or(q -> q.eq("store_id", base.getStore_id()) +// .eq("product_id", base.getProduct_id())); +// }); +// query.groupBy("product_id"); +// query.orderByAsc("product_id"); +// +// LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); +// queryWrapper.groupBy(ShopProductItem::getProduct_id); + List product_ids = new ArrayList<>(); + for (ShopProductBase shopProductBase : shopProductBaseList) { + product_ids.add(shopProductBase.getProduct_id()); + } + return shopProductItemService.getLimitFirstByProductId(product_ids); } /** @@ -421,9 +429,9 @@ public class ProductMappingServiceImpl extends BaseServiceImpl> futures = new ArrayList<>(); - Map shopProductSpecItemMap = shopProductSpecItemService.getExistItem(storeId); - Map productMappingMap = this.getProductMapping(storeId); - Map ShopBaseProductSpecMap = baseProductSpecService.getShopBaseProductSpecMap(storeId); + Map shopProductSpecItemMap = shopProductSpecItemService.getExistItem(storeId); + Map productMappingMap = this.getProductMapping(storeId); + Map ShopBaseProductSpecMap = baseProductSpecService.getShopBaseProductSpecMap(storeId); boolean isUpDatePrice=ObjectUtil.isNotEmpty(storeDbConfig.getRefreshTime()); for (int i=1;i<=pages;i++){ int finalI = i; diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncBaseThirdSxAbstract.java b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncBaseThirdSxAbstract.java index b12a6276..ac037e6c 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncBaseThirdSxAbstract.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncBaseThirdSxAbstract.java @@ -701,8 +701,8 @@ public abstract class SyncBaseThirdSxAbstract{ * @param storeId * @return */ - public int baseSaveOrUpdateGoodsBatch(JSONArray goodsListJSON,String storeId,String isNegativeAllowed,String priorityMode, - Map brandMaps,Map shopProductSpecItemMap,Map ShopBaseProductSpecMap, Map productMappingMap,boolean isUpdatePrice){ + public int baseSaveOrUpdateGoodsBatch(JSONArray goodsListJSON,String storeId,String isNegativeAllowed, + Map brandMaps){ AtomicInteger resultCount = new AtomicInteger(); Map categoryMap= productCategoryService.getCategoryListByStoreId(storeId);//热数据加载 List shopProductBaseList=new ArrayList<>(); @@ -904,7 +904,7 @@ public abstract class SyncBaseThirdSxAbstract{ shopProductBaseService.saveProductBatch(shopProductBaseList,shopProductIndexList,shopProductDataList,shopProductDetailList,shopProductInfoList,shopProductItemLists, shopProductImageList, new ArrayList(), - new ArrayList(),priorityMode,shopProductSpecItemMap,ShopBaseProductSpecMap,productMappingMap,isUpdatePrice); + new ArrayList()); return resultCount.get(); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncThirdDataServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncThirdDataServiceImpl.java index 1944901d..63cd2b79 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncThirdDataServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncThirdDataServiceImpl.java @@ -574,8 +574,7 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements syncPrimaryKey(); shopNumberSeqService.clearKey(); shopBaseProductCategoryService.clearCategoryCache(storeId); - baseProductSpecService.clearShopBaseProductSpecMap(Integer.valueOf(storeId)); - shopProductSpecItemService.clearExistItem(Integer.valueOf(storeId)); + // shopProductSpecItemService.clearExistItem(Integer.valueOf(storeId)); shopNumberSeqService.clearKeyStoreItemSepcId(); ExecutorService executor = Executors.newFixedThreadPool(6); List> futures = new ArrayList<>(); @@ -590,14 +589,14 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements QueryWrapper storeDbConfigQueryWrapper = new QueryWrapper<>(); storeDbConfigQueryWrapper.eq("store_id", storeId); StoreDbConfig storeDbConfig = storeDbConfigService.getOne(storeDbConfigQueryWrapper); - Map shopProductSpecItemMap = shopProductSpecItemService.getExistItem(Integer.valueOf(storeId));//切割缓存 - Map productMappingMap = productMappingService.getProductMapping(Integer.valueOf(storeId));//切割缓存 - Map ShopBaseProductSpecMap = baseProductSpecService.getShopBaseProductSpecMap(Integer.valueOf(storeId));//切割商品缓存 +// Map shopProductSpecItemMap = shopProductSpecItemService.getExistItem(Integer.valueOf(storeId));//切割缓存 +// Map productMappingMap = productMappingService.getProductMapping(Integer.valueOf(storeId));//切割缓存 +// Map ShopBaseProductSpecMap = baseProductSpecService.getShopBaseProductSpecMap(Integer.valueOf(storeId));//切割商品缓存 for (int i = 0; i < newFolders.size(); i++) { final int taskId = i; final String isNegativeAllowed = storeDbConfig.getIsNegativeAllowed(); - String priorityMode = storeDbConfig.getPriorityMode(); - boolean isUpdatePrice= ObjectUtil.isNotEmpty(storeDbConfig.getRefreshTime());//是否更新所有切割价格 + //String priorityMode = storeDbConfig.getPriorityMode(); + //boolean isUpdatePrice= ObjectUtil.isNotEmpty(storeDbConfig.getRefreshTime());//是否更新所有切割价格 threadNum.incrementAndGet(); futures.add(executor.submit(() -> { int count = 0;//失败重试机制,当失败重试一次,再次失败则记录到数据库中 @@ -607,7 +606,7 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements String fileName = "good_" + (taskId + 1) + ".txt"; JSONArray jsonArray = new ThreadFileUtils().processFolder(taskName, newFolders.get(taskId)); try { - baseSaveOrUpdateGoodsBatch(jsonArray, storeId, isNegativeAllowed, priorityMode, brandMaps,shopProductSpecItemMap,ShopBaseProductSpecMap,productMappingMap,isUpdatePrice); + baseSaveOrUpdateGoodsBatch(jsonArray, storeId, isNegativeAllowed, brandMaps); success.getAndIncrement(); threadNum.decrementAndGet(); return "成功" + taskId; @@ -638,8 +637,6 @@ public class SyncThirdDataServiceImpl extends SyncBaseThirdSxAbstract implements shopNumberSeqService.clearKey(); shopNumberSeqService.clearKeyStoreItemSepcId(); shopBaseProductCategoryService.clearCategoryCache(storeId); - shopProductSpecItemService.clearExistItem(Integer.valueOf(storeId)); - baseProductSpecService.clearShopBaseProductSpecMap(Integer.valueOf(storeId)); productBrandService.clearBrandMapByStoreId(storeId); List syncFileLogs = new ArrayList<>(); for (int i = 0; i < failFolders.size(); i++) { diff --git a/mall-shop/src/main/resources/mapper/product/ShopProductItemMapper.xml b/mall-shop/src/main/resources/mapper/product/ShopProductItemMapper.xml index edebb1d3..82f70ce1 100644 --- a/mall-shop/src/main/resources/mapper/product/ShopProductItemMapper.xml +++ b/mall-shop/src/main/resources/mapper/product/ShopProductItemMapper.xml @@ -228,4 +228,16 @@ + +