规格参数接口总结

接口层

   
    @ApiOperation(value = "规格参数接口", notes = "规格参数业务", produces = "application/json")
    @PostMapping("/Specifications")
    public BaseResponse<Map<String,Object>> list1(@RequestHeader(name = "Authorization", defaultValue = "token") String token,
                                                  @RequestBody ProductAttrMember productAttrMember 
                                    ) throws IOException {
        _logger.info("规格参数接口");
        Integer productId=productAttrMember.getProductId();
        String goodId=productAttrMember.getGoodId();
        Map<String, Object> dataMap=new HashMap<>();
        
    // 组装商品规格信息
    List<ProductNorm> normList = new ArrayList<ProductNorm>();
    Map<String, ProductNorm> normMap = new HashMap<String, ProductNorm>();
    Map<String, ProductNormAttr> attrMap = new HashMap<String, ProductNormAttr>();
    // 记录有效的规格组合
    List<String> effectAttr = new ArrayList<>();
    boolean def = false;
    boolean defWithId = false;
  //获得货品信息,默认取第一个 包含某规格商品的库存及价格信息 
    ServiceResult<List<ProductGoods>> goodsServiceResult = productGoodsService
        .getGoodSByProductId(productId);
    List<ProductGoods> goods = goodsServiceResult.getResult();

    if (goods == null || goods.size() == 0) {
        dataMap.put("info", "货品信息为空。");
        return new BaseResponse<Map<String,Object>>(false,null,"商品信息为空");
    }
    for (ProductGoods good : goods) {
        String normName = good.getNormName(); // 如:颜色,红色;内存,4G
        String normAttrId = good.getNormAttrId(); // 如:1,17

        if (StringUtil.isEmpty(normName, true)) {
            // 规则属性为空则表示该商品没有启用规格(只有一个货品)
            // 设置默认货品,只有一个货品时设定该货品
            dataMap.put("商品信息", good);
            continue;
        }

        if (good.getState() == null || good.getState().intValue() == ProductGoods.DISABLE) {
            // 货品没有启用则规格不参与组装
            continue;
        }

        // 获取默认显示的货品,不管id为goodId的货品存在与否、启用与否,必须设置一个默认的货品
        if (!defWithId) {
            if (good.getId().equals(goodId)) {
                defWithId = true;
                def = true;
                // 如果有指定ID的货品,设定指定ID的货品为默认货品
                dataMap.put("商品信息", good);
            } else if (!def) {
                // 设置默认货品,有多个货品时,第一个有效货品为默认货品
                dataMap.put("商品信息", good);
                def = true;
            }
        }

        effectAttr.add(normAttrId);

        String[] normNameSplit = normName.split(";");
        String[] normAttrIdSplit = normAttrId.split(",");

        if (normNameSplit.length > 0) {
            // 循环
            for (int i = 0; i < normNameSplit.length; i++) {
                String name = normNameSplit[i];

                // 得到类似:颜色,红色的值,颜色为规格名称,红色为规格的值
                String[] cellName = name.split(",");

                if (normMap.get(cellName[0]) == null) {
                    // 如果规格map中没有当前规格,则添加规格和对应的规格值
                    ProductNorm norm = new ProductNorm();
                    norm.setName(cellName[0]);
                    // 保存规则名称
                    normList.add(norm);
                    normMap.put(cellName[0], norm);
                    // 保存规则值
                    List<ProductNormAttr> attrList = new ArrayList<ProductNormAttr>();
                    ProductNormAttr attr = new ProductNormAttr();
                    attr.setId(ConvertUtil.toInt(normAttrIdSplit[i], 0));
                    attr.setName(cellName[1]);
                    attrList.add(attr);
                    norm.setAttrList(attrList);

                    // 记录到map中防止重复添加
                    attrMap.put(cellName[1], attr);
                } else {
                    // 如果规格map中有当前规格,则不添加规格,对应的规格值再判断是否已经存在决定是否添加
                    ProductNorm norm = normMap.get(cellName[0]);

                    // 判断是否已有规则值,如果没有则添加,有则不再添加
                    if (attrMap.get(cellName[1]) == null) {
                        // 规则值
                        List<ProductNormAttr> attrList = norm.getAttrList();
                        ProductNormAttr attr = new ProductNormAttr();
                        attr.setId(ConvertUtil.toInt(normAttrIdSplit[i], 0));
                        attr.setName(cellName[1]);
                        attrList.add(attr);
                        norm.setAttrList(attrList);
                        // 记录到map中防止重复添加
                        attrMap.put(cellName[1], attr);
                    }
                }
            }
        }
    }
    // 有效货品包含的规格
    dataMap.put("有效商品包含的规格", normList);
    // 规格数量
    dataMap.put("规格数量", normList.size());
    // 有效的规格组合
    dataMap.put("有效的规格组合", new Gson().toJson(effectAttr));
    return new BaseResponse<>(true,dataMap,null);
 }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值