package cn.lili.modules.goods.sku; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Assert; import cn.hutool.json.JSONUtil; import cn.lili.modules.goods.entity.dos.Goods; import cn.lili.modules.goods.entity.dos.GoodsSku; import org.springframework.stereotype.Component; import java.util.*; /** * @author paulG * @since 2022/5/20 **/ @Component public class GoodsSkuBuilder { private static final String IMAGES_KEY = "images"; /** * 构建商品sku * * @param goods 商品 * @param skuInfo sku信息列表 * @return 商品sku */ public static GoodsSku build(Goods goods, Map skuInfo) { GoodsSku goodsSku = new GoodsSku(goods); builderSingle(goodsSku, skuInfo); return goodsSku; } /** * 批量构建商品sku * * @param goods 商品 * @return 商品sku */ public static List buildBatch(Goods goods, List> skuList) { Assert.notEmpty(skuList, "skuList不能为空"); Assert.notNull(goods, "goods不能为空"); List goodsSkus = new ArrayList<>(); for (Map skuInfo : skuList) { GoodsSku goodsSku = new GoodsSku(goods); builderSingle(goodsSku, skuInfo); goodsSkus.add(goodsSku); } return goodsSkus; } private static void builderSingle(GoodsSku goodsSku, Map skuInfo) { Assert.notNull(goodsSku, "goodsSku不能为空"); Assert.notEmpty(skuInfo, "skuInfo不能为空"); //规格简短信息 StringBuilder simpleSpecs = new StringBuilder(); //商品名称 StringBuilder goodsName = new StringBuilder(goodsSku.getGoodsName()); //规格值 Map specMap = new LinkedHashMap<>(); // 原始规格项 String[] ignoreOriginKeys = {"id", "sn", "cost", "price", "quantity", "weight", "alertQuantity"}; //获取规格信息 for (Map.Entry spec : skuInfo.entrySet()) { //保存新增规格信息 if (!CollUtil.contains(Arrays.asList(ignoreOriginKeys), spec.getKey()) && spec.getValue() != null) { specMap.put(spec.getKey(), spec.getValue()); if (!spec.getKey().equals(IMAGES_KEY)) { //设置商品名称 goodsName.append(" ").append(spec.getValue()); //规格简短信息 simpleSpecs.append(" ").append(spec.getValue()); } } } //设置规格信息 goodsSku.setGoodsName(goodsName.toString()); //规格信息 goodsSku.setId(Convert.toStr(skuInfo.get("id"), "")); goodsSku.setSn(Convert.toStr(skuInfo.get("sn"))); goodsSku.setWeight(Convert.toDouble(skuInfo.get("weight"), 0D)); goodsSku.setPrice(Convert.toDouble(skuInfo.get("price"), 0D)); goodsSku.setCost(Convert.toDouble(skuInfo.get("cost"), 0D)); goodsSku.setQuantity(Convert.toInt(skuInfo.get("quantity"), 0)); goodsSku.setSpecs(JSONUtil.toJsonStr(specMap)); goodsSku.setSimpleSpecs(simpleSpecs.toString()); goodsSku.setAlertQuantity(Convert.toInt(skuInfo.get("alertQuantity"), 0)); } }