商品核心逻辑说明:商品参数组及商品缓存表结构设计与核心代码展示

后台-系统设置-扩展变量-手机广告位-内容正文顶部

一、商品参数组

1、表结构设计

  商品关联参数表(es_goods_params)

  关联了商品表(es_goods),商品参数组表(es_parameter)

  参数表(es_parameters)

  参数组(es_parameter_group)

2、商品参数结构

二、商品缓存

1、设计说明

  商品为高频率读取数据,频繁读取数据库,会导致数据库压力过大,所以使用缓存机制,常用数据存入redis中。

2、数据结构设计

  商品缓存类:CacheGoods

  /**缓存商品对象*/

  @ApiModel

  @JsonNaming(value=PropertyNamingStrategy.SnakeCaseStrategy.class)

  publicclassCacheGoodsimplementsSerializable{

  privatestaticfinallongserialVersionUID=-3642358108471082387L;

  @ApiModelProperty(name="goods_id",value="商品id")

  @Column(name="goods_id")

  privateLonggoodsId;

  @ApiModelProperty(name="category_id",value="分类id")

  privateLongcategoryId;

  @ApiModelProperty(name="goods_name",value="商品名称")

  @Column(name="goods_name")

  privateStringgoodsName;

  @ApiModelProperty(name="sn",value="商品编号")

  @Column(name="sn")

  privateStringsn;

  @ApiModelProperty(name="price",value="商品价格")

  @Column(name="price")

  privateDoubleprice;

  @ApiModelProperty(name="weight",value="重量")

  @Column(name="weight")

  privateDoubleweight;

  @ApiModelProperty(name="intro",value="详情")

  privateStringintro;

  @ApiModelProperty(name="goods_transfee_charge",value="谁承担运费0:买家承担,1:卖家承担")

  @Column(name="goods_transfee_charge")

  privateIntegergoodsTransfeeCharge;

  @ApiModelProperty(name="template_id",value="运费模板id,不需要运费模板时值是0")

  @Column(name="template_id")

  privateLongtemplateId;

  @ApiModelProperty(name="market_enable",value="是否上架,1上架0下架")

  @Column(name="market_enable")

  privateIntegermarketEnable;

  @ApiModelProperty(name="disabled",value="是否放入回收站0删除1未删除")

  @Column(name="disabled")

  privateIntegerdisabled;

  @ApiModelProperty(name="is_auth",value="是否审核通过0未审核1通过2不通过")

  @Column(name="is_auth")

  privateIntegerisAuth;

  @ApiModelProperty(value="可用库存")

  @Column(name="enable_quantity")

  privateIntegerenableQuantity;

  @ApiModelProperty(name="quantity",value="库存")

  privateIntegerquantity;

  @ApiModelProperty(name="seller_id",value="卖家")

  privateLongsellerId;

  @ApiModelProperty(name="seller_name",value="卖家名称")

  privateStringsellerName;

  @ApiModelProperty(name="sku_list",value="sku列表")

  privateListskuList;

  @ApiModelProperty(name="thumbnail",value="商品缩略图")

  privateStringthumbnail;

  @ApiModelProperty(name="last_modify",value="商品最后修改时间")

  privateLonglastModify;

  @ApiModelProperty(name="comment_num",value="评论数量")

  privateIntegercommentNum;

  @ApiModelProperty(name="grade",value="商品好评率")

  privateDoublegrade;

  @ApiModelProperty(name="mobile_intro",value="商品移动端详情")

  privateStringmobileIntro;

  @ApiModelProperty(name="goods_video",value="商品视频")

  privateStringgoodsVideo;

  .....

  SKU缓存类:GoodsSkuVO

  @ApiModel

  @JsonNaming(value=PropertyNamingStrategy.SnakeCaseStrategy.class)

  publicclassGoodsSkuVOextendsGoodsSkuDO{

  privatestaticfinallongserialVersionUID=-666090547834195127L;

  @ApiModelProperty(name="spec_list",value="规格列表",required=false)

  privateListspecList;

  @ApiModelProperty(name="goods_transfee_charge",value="谁承担运费0:买家承担,1:卖家承担",hidden=true)

  privateIntegergoodsTransfeeCharge;

  @ApiModelProperty(value="是否被删除0删除1未删除",hidden=true)

  privateIntegerdisabled;

  @ApiModelProperty(value="上架状态0下架1上架",hidden=true)

  privateIntegermarketEnable;

  @ApiModelProperty(name="goods_type",value="商品类型NORMAL普通POINT积分")

  privateStringgoodsType;

  @ApiModelProperty(value="最后修改时间",hidden=true)

  privateLonglastModify;

  @ApiModelProperty(value="运费脚本",hidden=true)

  privateListscripts;

  GoodsSkuDO

  @TableName("es_goods_sku")

  @ApiModel

  @JsonNaming(value=PropertyNamingStrategy.SnakeCaseStrategy.class)

  publicclassGoodsSkuDOimplementsSerializable{

  privatestaticfinallongserialVersionUID=5102510694003249L;

  /**

  *主键

  */

  @TableId(type=IdType.ASSIGN_ID)

  @ApiModelProperty(hidden=true)

  privateLongskuId;

  /**

  *商品id

  */

  @ApiModelProperty(name="goods_id",value="商品id",hidden=true)

  privateLonggoodsId;

  /**

  *商品名称

  */

  @ApiModelProperty(name="goods_name",value="商品名称",hidden=true)

  privateStringgoodsName;

  /**

  *商品编号

  */

  @ApiModelProperty(name="sn",value="商品编号",required=false)

  @Length(max=30,message="商品规格编号太长,不能超过30个字符")

  privateStringsn;

  /**

  *库存

  */

  @ApiModelProperty(name="quantity",value="库存",required=false)

  @Max(value=99999999,message="库存不能超过99999999")

  privateIntegerquantity;

  /**

  *可用库存

  */

  @ApiModelProperty(name="enable_quantity",value="可用库存")

  privateIntegerenableQuantity;

  /**

  *商品价格

  */

  @ApiModelProperty(name="price",value="商品价格",required=false)

  @Max(value=99999999,message="价格不能超过99999999")

  privateDoubleprice;

  /**

  *规格信息json

  */

  @ApiModelProperty(name="specs",value="规格信息json",hidden=true)

  privateStringspecs;

  /**

  *成本价格

  */

  @ApiModelProperty(name="cost",value="成本价格",required=true)

  @Max(value=99999999,message="成本价格不能超过99999999")

  privateDoublecost;

  /**

  *重量

  */

  @ApiModelProperty(name="weight",value="重量",required=true)

  @Max(value=99999999,message="重量不能超过99999999")

  privateDoubleweight;

  /**

  *卖家id

  */

  @ApiModelProperty(name="seller_id",value="卖家id",hidden=true)

  privateLongsellerId;

  /**

  *卖家名称

  */

  @ApiModelProperty(name="seller_name",value="卖家名称",hidden=true)

  privateStringsellerName;

  /**

  *分类id

  */

  @ApiModelProperty(name="category_id",value="分类id",hidden=true)

  privateLongcategoryId;

  /**

  *缩略图

  */

  @ApiModelProperty(name="thumbnail",value="缩略图",hidden=true)

  privateStringthumbnail;

  @ApiModelProperty(name="hash_code",value="hash_code",hidden=true)

  privateIntegerhashCode;

  /**

  *运费模板ID(非数据库字段)

  */

  @TableField(exist=false)

  privateLongtemplateId;

3、核心代码展示

  缓存商品的查询和写入

  /**

  *缓存中查询商品的信息

  *

  *@paramgoodsId商品主键

  *@return

  */

  @Override

  publicCacheGoodsgetFromCache(LonggoodsId){

  CacheGoodsgoods=(CacheGoods)cache.get(CachePrefix.GOODS.getPrefix()+goodsId);

  logger.debug("由缓存中读出商品:");

  logger.debug(goods);

  if(goods==null){

  GoodsDOgoodsDB=this.getModel(goodsId);

  if(goodsDB==null){

  thrownewServiceException(GoodsErrorCode.E301.code(),"该商品已被彻底删除");

  }

  //GoodsVo的对象返回,GoodsVo中的skuList是要必须填充好的

  ListskuList=goodsSkuManager.listByGoodsId(goodsId);

  goods=newCacheGoods();

  BeanUtils.copyProperties(goodsDB,goods);

  goods.setSkuList(skuList);

  //填充库存数据

  fillStock(goods);

  cache.put(CachePrefix.GOODS.getPrefix()+goodsId,goods);

  logger.debug("由缓存中读出商品为空,由数据库中返回商品:");

  logger.debug(goods);

  returngoods;

  }else{

  //填充库存数据

  fillStock(goods);

  }

  returngoods;

  }

  以上就是关于商品参数组及商品缓存的一些内容,想了解更多详情,可以持续关注易族智汇javashop技术文档栏目信息

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

后台-系统设置-扩展变量-手机广告位-内容正文底部
留言与评论(共有 0 条评论)
   
验证码: