zhanghua
2025-06-11 2ca169c85f61256fb5185c078dba1bfef2be5066
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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<String, Object> skuInfo) {
        GoodsSku goodsSku = new GoodsSku(goods);
        builderSingle(goodsSku, skuInfo);
        return goodsSku;
    }
 
    /**
     * 批量构建商品sku
     *
     * @param goods 商品
     * @return 商品sku
     */
    public static List<GoodsSku> buildBatch(Goods goods, List<Map<String, Object>> skuList) {
        Assert.notEmpty(skuList, "skuList不能为空");
        Assert.notNull(goods, "goods不能为空");
        List<GoodsSku> goodsSkus = new ArrayList<>();
        for (Map<String, Object> skuInfo : skuList) {
            GoodsSku goodsSku = new GoodsSku(goods);
            builderSingle(goodsSku, skuInfo);
            goodsSkus.add(goodsSku);
        }
        return goodsSkus;
    }
 
 
    private static void builderSingle(GoodsSku goodsSku, Map<String, Object> skuInfo) {
        Assert.notNull(goodsSku, "goodsSku不能为空");
        Assert.notEmpty(skuInfo, "skuInfo不能为空");
        //规格简短信息
        StringBuilder simpleSpecs = new StringBuilder();
        //商品名称
        StringBuilder goodsName = new StringBuilder(goodsSku.getGoodsName());
        //规格值
        Map<String, Object> specMap = new LinkedHashMap<>();
 
        // 原始规格项
        String[] ignoreOriginKeys = {"id", "sn", "cost", "price", "quantity", "weight", "alertQuantity"};
        //获取规格信息
        for (Map.Entry<String, Object> 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));
    }
 
 
}