規格引數介面總結
阿新 • • 發佈:2018-11-10
介面層
@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); }