天天看點

【第七篇】商城系統-商品釋出-SKU和SPU管理

【第七篇】商城系統-商品釋出-SKU和SPU管理

商品服務

1.新增商品

1.1 品牌的關聯

1.1.1 PubSub依賴缺失

打開新增商品頁面的時候會出現的錯誤提示:

【第七篇】商城系統-商品釋出-SKU和SPU管理

原因是缺少:PubSub相關依賴

解決辦法

  • 使用npm添加依賴:npm install --save pubsub-js(失敗的話使用此指令:cnpm install --save pubsub-js)
  • 在src下的main.js中引用:

    import PubSub from ‘pubsub-js’

    Vue.prototype.PubSub = PubSub

  • 【第七篇】商城系統-商品釋出-SKU和SPU管理
  • 在.eslintrc.js中添加一下配置
【第七篇】商城系統-商品釋出-SKU和SPU管理

1.1.2 品牌關聯

拷貝對應的前端頁面檔案

【第七篇】商城系統-商品釋出-SKU和SPU管理

添加後端對應的服務

【第七篇】商城系統-商品釋出-SKU和SPU管理

然後service中查詢處理

【第七篇】商城系統-商品釋出-SKU和SPU管理

最後的顯示效果

【第七篇】商城系統-商品釋出-SKU和SPU管理

1.1.3 會員等級

  首先我們需要啟動會員子產品,并且配置對應的網關路由資訊

【第七篇】商城系統-商品釋出-SKU和SPU管理
【第七篇】商城系統-商品釋出-SKU和SPU管理

1.1.4 規格參數

  在新增商品的第二步我們就需要設定對應的規格參數,而這些規格參數是根據前面一步選擇的三級分類來查詢出來的。

【第七篇】商城系統-商品釋出-SKU和SPU管理

  響應對應的資料,我們需要先建立對應的VO對象。

package com.msb.mall.product.vo;

import com.baomidou.mybatisplus.annotation.TableId;
import com.msb.mall.product.entity.AttrEntity;
import lombok.Data;

import java.util.List;

@Data
public class AttrGroupWithAttrsVo {
    /**
     * 分組id
     */
    @TableId
    private Long attrGroupId;
    /**
     * 組名
     */
    private String attrGroupName;
    /**
     * 排序
     */
    private Integer sort;
    /**
     * 描述
     */
    private String descript;
    /**
     * 組圖示
     */
    private String icon;
    /**
     * 所屬分類id
     */
    private Long catelogId;

    // 關聯對應的屬性資訊
    private List<AttrEntity> attrs;
}      

  然後建立對應的controller

【第七篇】商城系統-商品釋出-SKU和SPU管理

  然後建立對應的service

【第七篇】商城系統-商品釋出-SKU和SPU管理

1.2 釋出商品

1.2.1 VO 接收資料

  前端頁面送出的JSON資料非常複雜,我們需要在後端服務通過對應的VO對象來接收這些相關的資料。

【第七篇】商城系統-商品釋出-SKU和SPU管理

然後通過線上的json格式處理工具生成對應的VO工具類

【第七篇】商城系統-商品釋出-SKU和SPU管理

1.2.2 儲存對應的資料

  需要儲存的資料拆解為一下六個部分。

【第七篇】商城系統-商品釋出-SKU和SPU管理

1.2.3 儲存商品基本資訊

【第七篇】商城系統-商品釋出-SKU和SPU管理

1.2.4 儲存商品描述

【第七篇】商城系統-商品釋出-SKU和SPU管理

需要注意的地方:

【第七篇】商城系統-商品釋出-SKU和SPU管理

1.2.4 儲存圖集資訊

【第七篇】商城系統-商品釋出-SKU和SPU管理

1.2.5 儲存規格參數

【第七篇】商城系統-商品釋出-SKU和SPU管理

1.2.6 SKU基本資訊存儲

【第七篇】商城系統-商品釋出-SKU和SPU管理

1.2.7 SKU的圖集

【第七篇】商城系統-商品釋出-SKU和SPU管理

1.2.8 SKU的銷售屬性

【第七篇】商城系統-商品釋出-SKU和SPU管理

1.3 遠端服務調用

【第七篇】商城系統-商品釋出-SKU和SPU管理
【第七篇】商城系統-商品釋出-SKU和SPU管理
【第七篇】商城系統-商品釋出-SKU和SPU管理
【第七篇】商城系統-商品釋出-SKU和SPU管理

1.3.1 滿減,折扣,會員價儲存

在coupon服務中定義相關的接口及處理的service

【第七篇】商城系統-商品釋出-SKU和SPU管理
【第七篇】商城系統-商品釋出-SKU和SPU管理

然後我們在Product服務中來處理接口的調用

【第七篇】商城系統-商品釋出-SKU和SPU管理

然後在商品的service中完成服務的調用

【第七篇】商城系統-商品釋出-SKU和SPU管理

完成滿減折扣和會員價的service存儲

public void saveSkuReduction(SkuReductionDTO dto) {
        // 5.3 儲存滿減資訊,折扣,會員價
        // mall_sms: sms_sku_ladder sms_full_reduction sms_member_price
        // 1.折扣
        SkuLadderEntity ladderEntity = new SkuLadderEntity();
        ladderEntity.setSkuId(dto.getSkuId());
        ladderEntity.setFullCount(dto.getFullCount());
        ladderEntity.setDiscount(dto.getDiscount());
        ladderEntity.setAddOther(dto.getCountStatus());
        if(ladderEntity.getFullCount() > 0){
            ladderService.save(ladderEntity);
        }
        // 2.滿減
        SkuFullReductionEntity fullReductionEntity = new SkuFullReductionEntity();
        BeanUtils.copyProperties(dto,fullReductionEntity);
        if(fullReductionEntity.getFullPrice().compareTo(new BigDecimal(0)) == 1){
            this.save(fullReductionEntity);
        }
        // 3.會員價
        List<MemberPriceEntity> memberPriceEntities = dto.getMemberPrice().stream().map(item -> {
            MemberPriceEntity priceEntity = new MemberPriceEntity();
            priceEntity.setSkuId(dto.getSkuId());
            priceEntity.setMemberLevelId(item.getId());
            priceEntity.setMemberPrice(item.getPrice());
            priceEntity.setAddOther(1); // 是否可疊加
            return priceEntity;
        }).collect(Collectors.toList());
        memberPriceService.saveBatch(memberPriceEntities);
    }      

1.3.2 會員積分存儲

會員積分資訊也是存儲在Coupon服務中,我們同樣需要通過Fegin來調用。

【第七篇】商城系統-商品釋出-SKU和SPU管理

2.SPU管理

  提供不同條件的檢索,分類,品牌,狀态,關鍵字檢索。

【第七篇】商城系統-商品釋出-SKU和SPU管理

  背景我們需要在Service中完成對應的操作。

/**
     * SPU資訊檢索
     * 分頁查詢
     * 分類 品牌 狀态 關鍵字查詢
     * @param params
     * @return
     */
    @Override
    public PageUtils queryPageByCondition(Map<String, Object> params) {
        QueryWrapper<SpuInfoEntity> wrapper = new QueryWrapper<>();
        // 設定對應的檢索條件
        // 1. 關鍵字查詢
        String key = (String) params.get("key");
        if(!StringUtils.isEmpty(key)){
            // 需要添加關鍵字查詢
            wrapper.and((w)->{
                w.eq("id",key)
                        .or().like("spu_name",key)
                        .or().like("spu_description",key);
            });
        }
        // status
        String status = (String) params.get("status");
        if(!StringUtils.isEmpty(status)){
            wrapper.eq("publish_status",status);
        }
        // catalogId
        String catalogId = (String) params.get("catalogId");
        if(!StringUtils.isEmpty(catalogId) && !"0".equalsIgnoreCase(catalogId)){
            wrapper.eq("catalog_id",catalogId);
        }
        // brandId
        String brandId = (String) params.get("brandId");
        if(!StringUtils.isEmpty(brandId) && !"0".equalsIgnoreCase(brandId)){
            wrapper.eq("brand_id",brandId);
        }

        IPage<SpuInfoEntity> page = this.page(
                new Query<SpuInfoEntity>().getPage(params),
                wrapper
        );
        return new PageUtils(page);
    }      

  然後解決頁面顯示資料的問題,比如類别和品牌顯示的編号,建立時間和更新時間顯示格式問題。

【第七篇】商城系統-商品釋出-SKU和SPU管理

重新開機服務

【第七篇】商城系統-商品釋出-SKU和SPU管理

上面的是設定全局的格式化方式,如果我也特殊設定,這時我們可以在對應的entity對象的屬性上通過@JsonFormat 來指定,此處指定的會覆寫掉全局的設定。

【第七篇】商城系統-商品釋出-SKU和SPU管理
【第七篇】商城系統-商品釋出-SKU和SPU管理

針對顯示的分類和品牌顯示id的問題,我們需要通過對應的vo對象來傳輸,同時我們需要在service中完成對應的邏輯

【第七篇】商城系統-商品釋出-SKU和SPU管理

顯示的效果

【第七篇】商城系統-商品釋出-SKU和SPU管理

3.商品管理

/**
     * SKU 資訊檢索的方法
     * 類别
     * 品牌
     * 價格區間
     * 檢索的關鍵字
     * 分頁查詢
     *
     * @param params
     * @return
     */
    @Override
    public PageUtils queryPageByCondition(Map<String, Object> params) {
        QueryWrapper<SkuInfoEntity> wrapper = new QueryWrapper<>();
        // 檢索關鍵字
        String key = (String) params.get("key");
        if(!StringUtils.isEmpty(key)){
            wrapper.and(w->{
               w.eq("sku_id",key).or().like("sku_name",key);
            });
        }

        // 分類
        String catalogId = (String)params.get("catalogId");
        if(!StringUtils.isEmpty(catalogId) && !"0".equalsIgnoreCase(catalogId)){
            wrapper.eq("catalog_id",catalogId);
        }
        // 品牌
        String brandId = (String)params.get("brandId");
        if(!StringUtils.isEmpty(brandId) && !"0".equalsIgnoreCase(brandId)){
            wrapper.eq("brand_id",brandId);
        }
        // 價格區間
        String min = (String) params.get("min");
        if(!StringUtils.isEmpty(min)){
            wrapper.ge("price",min);
        }
        String max = (String) params.get("max");
        if(!StringUtils.isEmpty(max)){
            try {
                // 如果max=0那麼我們也不需要加這個條件
                BigDecimal bigDecimal = new BigDecimal(max);
                if(bigDecimal.compareTo(new BigDecimal(0)) == 1){
                    // 說明 max > 0
                    wrapper.le("price",max);
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        IPage<SkuInfoEntity> page = this.page(
                new Query<SkuInfoEntity>().getPage(params),
                wrapper
        );

        return new PageUtils(page);
    }      

繼續閱讀