From 5dcfa60056b21c31864c8fc8800b6daa1d280acd Mon Sep 17 00:00:00 2001 From: liyj <1617420630@qq.com> Date: Tue, 2 Sep 2025 11:15:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=95=86=E5=93=81=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E7=9B=B8=E5=85=B3=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/product/ShopProductItem.java | 1 + .../service/impl/SyncBaseThirdSxAbstract.java | 5 +- .../impl/SyncStoreSpecsServiceImpl.java | 89 ++++++++++++------- .../mapper/number/ShopNumberSeqMapper.xml | 2 +- sql/shop/dev/20250902_dml.sql | 3 + 5 files changed, 66 insertions(+), 34 deletions(-) create mode 100644 sql/shop/dev/20250902_dml.sql diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/product/ShopProductItem.java b/mall-common/src/main/java/com/suisung/mall/common/modules/product/ShopProductItem.java index 7fe99bc0..bb6508b8 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/product/ShopProductItem.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/product/ShopProductItem.java @@ -34,6 +34,7 @@ public class ShopProductItem implements Serializable { private Long item_id; @ApiModelProperty(value = "副标题(DOT):SKU名称") + @TableField(updateStrategy=NOT_EMPTY) private String item_name; @ApiModelProperty(value = "产品编号") 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 d1a1eb74..e1fc6441 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 @@ -990,7 +990,10 @@ public abstract class SyncBaseThirdSxAbstract{ QueryWrapper itemQuery=new QueryWrapper<>(); itemQuery.select("MAX(item_id) as item_id"); ShopProductItem shopProductItem= shopProductItemService.getOne(itemQuery); - Long itemtId= shopProductItem.getItem_id(); + Long itemtId=1L; + if(null!=shopProductItem){ + itemtId= shopProductItem.getItem_id(); + } // QueryWrapper itemWrapper=new QueryWrapper(); //itemWrapper.eq("prefix", "item_id"); ShopNumberSeq shopNumberSeqItem= new ShopNumberSeq(); diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncStoreSpecsServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncStoreSpecsServiceImpl.java index 744006b5..dfb16664 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncStoreSpecsServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sync/service/impl/SyncStoreSpecsServiceImpl.java @@ -14,6 +14,8 @@ import com.suisung.mall.common.modules.base.ShopBaseProductType; import com.suisung.mall.common.modules.product.*; import com.suisung.mall.common.modules.sync.SyncStoreSpecs; import com.suisung.mall.common.utils.StringUtils; +import com.suisung.mall.core.consts.ConstantRedis; +import com.suisung.mall.core.web.service.RedisService; import com.suisung.mall.shop.base.service.ShopBaseProductSpecService; import com.suisung.mall.shop.base.service.ShopBaseProductTypeService; import com.suisung.mall.shop.number.service.ShopNumberSeqService; @@ -70,6 +72,8 @@ public class SyncStoreSpecsServiceImpl extends ServiceImpl shopBaseProductTypeReidisKeyList=new ArrayList<>(); List shopBaseProductTypes= getShopBaseProductTypeList(syncStoreSpecsList,storeId); for(ShopBaseProductType shopBaseProductType:shopBaseProductTypes){ List specIdList=new ArrayList<>(); @@ -290,9 +295,11 @@ public class SyncStoreSpecsServiceImpl extends ServiceImpl addShopProductItemList=new ArrayList<>(); @@ -329,8 +336,10 @@ public class SyncStoreSpecsServiceImpl extends ServiceImpl addShopProductItemListFilter= addShopProductItemList.stream() + .filter(com.suisung.mall.common.utils.CommonUtil.distinctByKey(ShopProductItem::getItem_name)) + .collect(Collectors.toList()); + shopProductItemService.saveBatch(addShopProductItemListFilter,addShopProductItemListFilter.size()); } if(!updateShopProductItemList.isEmpty()){ shopProductItemService.updateBatchById(updateShopProductItemList,updateShopProductItemList.size()); @@ -406,36 +418,42 @@ public class SyncStoreSpecsServiceImpl extends ServiceImpl specItemJson=new HashMap<>(); - cn.hutool.json.JSONArray productUniqidjsonArray=new cn.hutool.json.JSONArray(); + //cn.hutool.json.JSONArray productUniqidjsonArray=new cn.hutool.json.JSONArray(); + Map product_uniqidMap = new HashMap(); AtomicReference itemQuantity= new AtomicReference<>(0); + Map jsonArraySpecItemJson=new HashMap<>(); sItemList.forEach(item->{ String itemSpec=item.getItem_spec(); cn.hutool.json.JSONArray arrayItemSpec = cn.hutool.json.JSONUtil.parseArray(itemSpec); - cn.hutool.json.JSONObject uniqidItemJson=new cn.hutool.json.JSONObject(); + //cn.hutool.json.JSONObject uniqidItemJson=new cn.hutool.json.JSONObject(); String specItemIdSpecItemId=""; for (Object josn_item_spec : arrayItemSpec) { Integer specId = Convert.toInt(((cn.hutool.json.JSONObject) josn_item_spec).get("id")); - Integer specName = Convert.toInt(((cn.hutool.json.JSONObject) josn_item_spec).get("name")); + String specName = Convert.toStr(((cn.hutool.json.JSONObject) josn_item_spec).get("name")); String specIdName=specId+"-"+specName; cn.hutool.json.JSONObject itemJson = (cn.hutool.json.JSONObject) ((cn.hutool.json.JSONObject) josn_item_spec).get("item"); - cn.hutool.json.JSONArray itemsJsonArray=new cn.hutool.json.JSONArray(); - if(specItemJson.containsKey(specIdName)){ - itemsJsonArray=specItemJson.get(specIdName); + if(!jsonArraySpecItemJson.containsKey(itemJson.toString())){ + jsonArraySpecItemJson.put(itemJson.toString(),itemSpec); + cn.hutool.json.JSONArray itemsJsonArray=new cn.hutool.json.JSONArray(); + if(specItemJson.containsKey(specIdName)){ + itemsJsonArray=specItemJson.get(specIdName); + } + itemsJsonArray.add(itemJson); + specItemJson.put(specIdName,itemsJsonArray); } - itemsJsonArray.add(itemJson); - specItemJson.put(specIdName,itemsJsonArray); if(StringUtils.isNotEmpty(specItemIdSpecItemId)){ specItemIdSpecItemId=specItemIdSpecItemId+"-"+itemJson.getStr("id"); }else { specItemIdSpecItemId=itemJson.getStr("id"); } } - uniqidItemJson.set(specItemIdSpecItemId,new Object[]{item.getItem_id(),item.getItem_quantity(),"","1001"}); - productUniqidjsonArray.add(uniqidItemJson); + product_uniqidMap.put(specItemIdSpecItemId,new Object[]{item.getItem_id(),item.getItem_quantity(),"",1001}); + // productUniqidjsonArray.add(uniqidItemJson); itemQuantity.updateAndGet(v -> v + item.getItem_quantity()); }); itemQualityMap.put(productId,itemQuantity.get()); cn.hutool.json.JSONArray jsonArraySpecItem=new cn.hutool.json.JSONArray(); + specItemJson.forEach((key,jsonArray)->{ cn.hutool.json.JSONObject itemJson = new cn.hutool.json.JSONObject(); itemJson.set("item",jsonArray); @@ -448,7 +466,7 @@ public class SyncStoreSpecsServiceImpl extends ServiceImpl queryWrapper=new QueryWrapper<>(); queryWrapper.select("item_id"); - for (ShopProductIndex shopProductIndex:shopProductIndexList) { - queryWrapper.or(q->q.eq("store_id",storeId) - .eq("product_id",shopProductIndex.getProduct_id()) - .and(wrapper->wrapper.eq("item_name","") - .or() - .isNull("item_name"))); - } - List queryShopProductItemList=shopProductItemService.list(queryWrapper); - if(!queryShopProductItemList.isEmpty()){ - List ItemIds= queryShopProductItemList.stream().map(ShopProductItem::getItem_id).collect(Collectors.toList()); - QueryWrapper shopProductItemSeqQueryWrapper=new QueryWrapper<>(); - shopProductItemSeqQueryWrapper.select("product_item_seq_id"); - shopProductItemSeqQueryWrapper.eq("item_id",ItemIds); - List rmSeq= shopProductItemSeqService.list(shopProductItemSeqQueryWrapper); - List rmSeqIds=rmSeq.stream().map(ShopProductItemSeq::getProduct_item_seq_id).collect(Collectors.toList()); - shopProductItemSeqService.removeBatchByIds(rmSeqIds); - shopProductItemService.removeBatchByIds(ItemIds,ItemIds.size()); + if(!shopProductIndexList.isEmpty()){ + for (ShopProductIndex shopProductIndex:shopProductIndexList) { + queryWrapper.or(q->q.eq("store_id",storeId) + .eq("product_id",shopProductIndex.getProduct_id()) + .and(wrapper->wrapper.eq("item_name","") + .or() + .isNull("item_name"))); + } + List queryShopProductItemList=shopProductItemService.list(queryWrapper); + if(!queryShopProductItemList.isEmpty()){ + List ItemIds= queryShopProductItemList.stream().map(ShopProductItem::getItem_id).collect(Collectors.toList()); + QueryWrapper shopProductItemSeqQueryWrapper=new QueryWrapper<>(); + shopProductItemSeqQueryWrapper.select("product_item_seq_id"); + shopProductItemSeqQueryWrapper.eq("item_id",ItemIds); + List rmSeq= shopProductItemSeqService.list(shopProductItemSeqQueryWrapper); + List rmSeqIds=rmSeq.stream().map(ShopProductItemSeq::getProduct_item_seq_id).collect(Collectors.toList()); + shopProductItemSeqService.removeBatchByIds(rmSeqIds); + shopProductItemService.removeBatchByIds(ItemIds,ItemIds.size()); + } } }catch (Exception e){ status.setRollbackOnly(); @@ -581,7 +601,12 @@ public class SyncStoreSpecsServiceImpl extends ServiceImpl shopProductItemList=shopProductItemService.list(wrapper); Map result=new HashMap<>(); for (ShopProductItem shopProductItem : shopProductItemList) { - result.put(shopProductItem.getItem_name(),shopProductItem.getItem_id()); + if(StringUtils.isNotEmpty(shopProductItem.getItem_name())){ + result.put(shopProductItem.getItem_name(),shopProductItem.getItem_id()); + }else { + result.put(shopProductItem.getItem_barcode(),shopProductItem.getItem_id()); + } + } return result; } diff --git a/mall-shop/src/main/resources/mapper/number/ShopNumberSeqMapper.xml b/mall-shop/src/main/resources/mapper/number/ShopNumberSeqMapper.xml index bfedffa4..ef1aa244 100644 --- a/mall-shop/src/main/resources/mapper/number/ShopNumberSeqMapper.xml +++ b/mall-shop/src/main/resources/mapper/number/ShopNumberSeqMapper.xml @@ -19,7 +19,7 @@ and number =(select max(item_id) from shop_product_item)+1 - SELECT * from shop_number_seq where prefix in("product_id","item_id") diff --git a/sql/shop/dev/20250902_dml.sql b/sql/shop/dev/20250902_dml.sql new file mode 100644 index 00000000..c336f834 --- /dev/null +++ b/sql/shop/dev/20250902_dml.sql @@ -0,0 +1,3 @@ +alter table shop_base_product_type drop INDEX type_is_draft; +alter table shop_base_product_type drop INDEX type_spec_ids; +alter table shop_base_product_type drop INDEX idx_shop_base_product_type_type_name; \ No newline at end of file