diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sync/exelModel/SxGoosModelExcel.java b/mall-shop/src/main/java/com/suisung/mall/shop/sync/exelModel/SxGoosModelExcel.java index d1e291d0..025bf542 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sync/exelModel/SxGoosModelExcel.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sync/exelModel/SxGoosModelExcel.java @@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; +import java.util.List; /** * 思迅同步商品数据入口数据 @@ -18,19 +19,19 @@ public class SxGoosModelExcel { private String product_name; @ApiModelProperty("商品货号") - @ExcelProperty(value = "商品货号", index = 1) + @ExcelIgnore private String product_number; @ApiModelProperty("商品条形码") - @ExcelProperty(value = "商品条形码", index = 2) + @ExcelProperty(value = "商品条形码", index = 1) private String product_barcode; @ApiModelProperty("所属分类") - @ExcelProperty(value = "所属分类", index = 3) + @ExcelProperty(value = "所属分类", index = 2) private String first_category_name; @ApiModelProperty("零售价") - @ExcelProperty(value = "零售价", index = 4) + @ExcelProperty(value = "零售价", index = 3) private BigDecimal retail_price; @ApiModelProperty("原价") @@ -38,15 +39,28 @@ public class SxGoosModelExcel { private BigDecimal original_price=retail_price; @ApiModelProperty("库存") - @ExcelProperty(value = "库存", index = 5) + @ExcelProperty(value = "库存", index = 4) private BigDecimal stock; + @ApiModelProperty("规格") + @ExcelProperty(value = "规格", index = 5) + private String shop_spec; + @ApiModelProperty("规格单位") @ExcelProperty(value = "规格单位", index = 6) private String unit; - @ApiModelProperty("最大购买商品量") - @ExcelProperty(value = "最大购买商品量", index = 7) + @ApiModelProperty("规格(JSON)-规格、规格值、goods_id 规格不需要全选就可以添加对应数据[") + @ExcelIgnore + private List product_spec; + + @ApiModelProperty("商品限购数量") + @ExcelProperty(value = "商品限购数量", index = 7) private Integer buy_limit; + @ApiModelProperty("品牌名称") + @ExcelProperty(value = "品牌名称", index = 8) + private String brand_name; + + } 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 ac037e6c..d1a1eb74 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 @@ -130,6 +130,7 @@ public abstract class SyncBaseThirdSxAbstract{ String storeId){ int count = 0; List productTypeList = new ArrayList<>(); + Map productTypeListMap=new HashMap<>(); for (int i = 0; i < list.size(); i++) { String categoryName=list.get(i).getCategory_name(); if(StringUtils.isNotEmpty(getForbidCategory(categoryName))){ @@ -143,7 +144,15 @@ public abstract class SyncBaseThirdSxAbstract{ ShopBaseProductType productType=new ShopBaseProductType(); productType.setType_is_draft(1);//发布 productType.setStore_id(Integer.valueOf(storeId)); - String brandName=o.getStr("brandName","其他品牌"); + String brandName=o.getStr("brandName","其它品牌"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("store_id",Integer.valueOf(storeId)); + queryWrapper.in("brand_name",Arrays.asList(brandName.split(","))); + // queryWrapper.eq("brand_name",brandName); + List shopBaseProductBrands=productBrandService.list(queryWrapper); + String brandIds=shopBaseProductBrands.stream() + .map(shopBaseProductBrand -> String.valueOf(shopBaseProductBrand.getBrand_id())) + .collect(Collectors.joining(",")); if (o != null) { // 重要:分类类型处理(强调共性) Integer typeId = 1001; @@ -153,24 +162,20 @@ public abstract class SyncBaseThirdSxAbstract{ if (productType != null) { typeId = productType.getType_id(); } else { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("store_id",Integer.valueOf(storeId)); - queryWrapper.eq("brand_name",brandName); - ShopBaseProductBrand shopBaseProductBrand=productBrandService.findOne(queryWrapper); // 新增一个类型 ShopBaseProductType newProductType = new ShopBaseProductType(); newProductType.setType_name(o.getStr("product_type")); newProductType.setType_buildin(0); newProductType.setType_is_draft(0);//发布 newProductType.setStore_id(Integer.valueOf(storeId)); - if(null!=shopBaseProductBrand){ - newProductType.setType_brand_ids(String.valueOf(shopBaseProductBrand.getBrand_id())); - } if (productTypeService.save(newProductType)) { typeId = newProductType.getType_id(); } productType=newProductType; } + if(StringUtils.isNotEmpty(brandIds)){ + productType.setType_brand_ids(brandIds); + } list.get(i).setType_id(typeId); } @@ -186,16 +191,38 @@ public abstract class SyncBaseThirdSxAbstract{ } // TODO storeId 不判断一下吗? ShopBaseProductCategory cate = productCategoryService.getCategoryByName(firstCategoryName,storeId); + ShopBaseProductType first_category_name_type=productTypeService.getProductTypeByName(firstCategoryName,storeId); + Integer firstTypeId = 1001; + if(null!=first_category_name_type){ + firstTypeId = first_category_name_type.getType_id(); + }else { + first_category_name_type=new ShopBaseProductType(); + first_category_name_type.setType_name(firstCategoryName); + first_category_name_type.setType_buildin(0); + first_category_name_type.setType_is_draft(0);//发布 + first_category_name_type.setStore_id(Integer.valueOf(storeId)); + if (productTypeService.save(first_category_name_type)) { + firstTypeId = first_category_name_type.getType_id(); + } + } + + if(StringUtils.isNotEmpty(brandIds)){ + first_category_name_type.setType_brand_ids(brandIds); + } + if (cate != null) { list.get(i).setCategory_parent_id(cate.getCategory_id()); + first_category_name_type.setType_category_id(cate.getCategory_id()); + firstParentId=cate.getCategory_id(); } else{ // 新增一个(第一级)父类 ShopBaseProductCategory firstCate = new ShopBaseProductCategory(); firstCate.setCategory_name(firstCategoryName); firstCate.setParent_id(0); firstCate.setStore_id(storeId); - firstCate.setType_id(typeId); + firstCate.setType_id(firstTypeId); firstCate.setData_source(2); + firstCate.setCategory_image(list.get(i).getCategory_image()); List libraryProductDTOS=libraryProductService.matchLibraryProducts(null,firstCategoryName,new ArrayList<>()); if(CollectionUtil.isNotEmpty(libraryProductDTOS)){ firstCate.setCategory_image(libraryProductDTOS.get(0).getThumb()); @@ -206,6 +233,11 @@ public abstract class SyncBaseThirdSxAbstract{ list.get(i).setCategory_parent_id(firstParentId); } } + if(null==productTypeListMap.get(first_category_name_type.getType_name())){ + first_category_name_type.setType_category_id(firstParentId); + productTypeList.add(first_category_name_type); + productTypeListMap.put(first_category_name_type.getType_name(),first_category_name_type.getType_name()); + } } @@ -218,16 +250,35 @@ public abstract class SyncBaseThirdSxAbstract{ } // TODO storeId 不判断一下吗? ShopBaseProductCategory cate = productCategoryService.getCategoryByName(secondCategoryName,storeId); + ShopBaseProductType second_category_type=productTypeService.getProductTypeByName(secondCategoryName,storeId); + Integer secondTypeId = 1001; + if(null!=second_category_type){ + secondTypeId = second_category_type.getType_id(); + }else { + second_category_type=new ShopBaseProductType(); + second_category_type.setType_name(secondCategoryName); + second_category_type.setType_buildin(0); + second_category_type.setType_is_draft(0);//发布 + second_category_type.setStore_id(Integer.valueOf(storeId)); + if (productTypeService.save(second_category_type)) { + secondTypeId = second_category_type.getType_id(); + } + } + if(StringUtils.isNotEmpty(brandIds)){ + second_category_type.setType_brand_ids(brandIds); + } if (cate != null) { list.get(i).setCategory_parent_id(cate.getCategory_id()); + second_category_type.setType_category_id(cate.getCategory_id()); } else { // 新增一个(第二级)父类 ShopBaseProductCategory secondCate = new ShopBaseProductCategory(); secondCate.setCategory_name(secondCategoryName); secondCate.setCategory_parent_id(firstParentId); secondCate.setStore_id(storeId); - secondCate.setType_id(typeId); + secondCate.setType_id(secondTypeId); secondCate.setData_source(2); + secondCate.setCategory_image(list.get(i).getCategory_image()); List libraryProductDTOS=libraryProductService.matchLibraryProducts(null,secondCategoryName,new ArrayList<>()); if(CollectionUtil.isNotEmpty(libraryProductDTOS)){ secondCate.setCategory_image(libraryProductDTOS.get(0).getThumb()); @@ -235,9 +286,15 @@ public abstract class SyncBaseThirdSxAbstract{ if (productCategoryService.saveOrUpdate(secondCate)) { // 当前子分类的第二级父类id list.get(i).setCategory_parent_id(secondCate.getCategory_id()); + second_category_type.setType_category_id(secondCate.getCategory_id()); } } + if(null==productTypeListMap.get(second_category_type.getType_name())) { + productTypeList.add(second_category_type); + productTypeListMap.put(second_category_type.getType_name(), second_category_type.getType_name()); + } } + } ShopBaseProductCategory productCategoryTemp = productCategoryService.getCategoryByName(list.get(i).getCategory_parent_id(), list.get(i).getCategory_name(), list.get(i).getStore_id()); @@ -262,7 +319,11 @@ public abstract class SyncBaseThirdSxAbstract{ count++; } productType.setType_category_id(list.get(i).getCategory_id()); - productTypeList.add(productType); + if(null==productTypeListMap.get(productType.getType_name())){ + productTypeList.add(productType); + productTypeListMap.put(productType.getType_name(),productType.getType_name()); + } + } saveBatchShopProductProductSpec(storeId,productTypeList); return count; @@ -749,7 +810,7 @@ public abstract class SyncBaseThirdSxAbstract{ shopProductBase.setProduct_from(1005);// 商品来源(ENUM):1000-发布;1001-天猫;1002-淘宝;1003-阿里巴巴;1004-京东;1005-思迅; shopProductBase.setProduct_add_time(currentDate.getTime()); shopProductBase.setProduct_unit_price(BigDecimal.valueOf(jsonObj.getDouble("retail_price"))); - String isSpecial=jsonObj.getStr("isSpecial"); + String isSpecial=jsonObj.getStr("isSpecial",DicEnum.YESORNO_0.getCode()); if(ObjectUtil.equals(isSpecial,DicEnum.YESORNO_0.getCode())||ObjectUtil.equals(isSpecial,DicEnum.YESORNO_1.getCode())){ shopProductBase.setIs_special(isSpecial);//是否特价商品 特价商品需要手动上架 todo 是否要开发定时上架功能 }else { @@ -867,7 +928,9 @@ public abstract class SyncBaseThirdSxAbstract{ shopProductItem.setItem_advice_price(BigDecimal.valueOf(jsonObj.getDouble("retail_price"))); shopProductItem.setItem_market_price(BigDecimal.valueOf(jsonObj.getDouble("original_price"))); //积分价 - shopProductItem.setItem_unit_points(new BigDecimal(jsonObj.getInt("points"))); + if(null!=jsonObj.get("points")){ + shopProductItem.setItem_unit_points(new BigDecimal(jsonObj.getInt("points"))); + } shopProductItem.setItem_quantity(stock.intValue()); //todo 特色商品切割 //负数产品判断 @@ -944,7 +1007,7 @@ public abstract class SyncBaseThirdSxAbstract{ * @param storeId */ private synchronized void saveBatchShopProductProductSpec(String storeId,List shopBaseProductTypes){ - Map categoryMap= productCategoryService.getCategoryListByStoreId(storeId); + Map categoryMap= productCategoryService.getCategoryListByStoreId(storeId); List shopBaseProductSpecList=new ArrayList<>(); Set categoryMapSet= categoryMap.entrySet(); for(Map.Entry categoryMapEntry:categoryMapSet){ @@ -996,7 +1059,7 @@ public abstract class SyncBaseThirdSxAbstract{ if(CollectionUtil.isNotEmpty(shopBaseProductTypes)){ productTypeService.updateBatchById(shopBaseProductTypes,shopBaseProductTypes.size()); } - + productCategoryService.clearCategoryCache(storeId); } @@ -1008,7 +1071,7 @@ public abstract class SyncBaseThirdSxAbstract{ .map(ShopBaseProductSpec::getSpec_name) .distinct() .collect(Collectors.toList()); - List existing = batchGetByStoreAndShopBaseProductSpec(storeProductPairs); + List existing = batchGetByStoreAndShopBaseProductSpec(storeProductPairs,productSpecs.get(0).getStore_id()); return existing.stream() .collect(Collectors.toMap( ShopBaseProductSpec::getSpec_name, @@ -1019,14 +1082,14 @@ public abstract class SyncBaseThirdSxAbstract{ /** * 批量根据店铺和货号查询商品 */ - private List batchGetByStoreAndShopBaseProductSpec(List ShopBaseProductSpecStr) { + private List batchGetByStoreAndShopBaseProductSpec(List ShopBaseProductSpecStr,Integer storeId) { if (CollUtil.isEmpty(ShopBaseProductSpecStr)) { return Collections.emptyList(); } QueryWrapper query = new QueryWrapper<>(); query.select("spec_id", "spec_name"); ShopBaseProductSpecStr.forEach(specName -> { - query.or(q -> q.eq("spec_name", specName)); + query.or(q -> q.eq("spec_name", specName).eq("store_id",storeId)); }); return shopBaseProductSpecService.list(query);