当前位置: 首页 > news >正文

淘宝支持做微交易网站吗外链查询

淘宝支持做微交易网站吗,外链查询,西安市建网站找哪家,如何做酒店网站设计文章目录 一,131-商城业务-商品上架-构造sku检索属性1,开发目标2,详细设计2.1,根据spu_id获取所有的规格参数2.2,根据上一步中查询结果进一步确认是否可搜索2.3,将可搜索的属性封装到Java模型中 二&#xf…

文章目录

  • 一,131-商城业务-商品上架-构造sku检索属性
    • 1,开发目标
    • 2,详细设计
      • 2.1,根据spu_id获取所有的规格参数
      • 2.2,根据上一步中查询结果进一步确认是否可搜索
      • 2.3,将可搜索的属性封装到Java模型中
  • 二,132-商城业务-商品上架-远程查询库存&泛型结果封装
    • 1,开发目标
    • 2,详细设计
      • 2.1 调用库存服务的接口
      • 2.2,库存服务根据sku_id查询库存量
      • 2.3,根据查询结果填充模型

一,131-商城业务-商品上架-构造sku检索属性

1,开发目标

这一节的主要内容是完成获取规格属性信息的功能

  • 从数据库中获取与 SPU 关联的所有规格属性。
  • 筛选出可被用于搜索的属性,并转换为 ES 所需的格式。
  • 注意点1:SPU的规格参数是这个SPU下所有SKU公用的,查询一次即可。
  • 注意点2:规程参数分为两类,一类是可搜索的,一类是不可搜索的。这里需要的是可搜索的规格参数。

2,详细设计

  • ① 从pms_product_attr_value表中根据spu_id查出这个spu下所有的属性。
  • ② 根据属性Id从属性表中pms_attr查询属性是否可搜索。
  • ③ 将可搜索的属性信息封装到Es的Java模型中。

2.1,根据spu_id获取所有的规格参数

List<ProductAttrValueEntity> baseAttrs = productAttrValueService.baseAttrList4Spu(spuId);

对应的Service实现非常简单。

	public List<ProductAttrValueEntity> baseAttrList4Spu(Long spuId) {List<ProductAttrValueEntity> attrValueEntityList = this.baseMapper.selectList(new QueryWrapper<ProductAttrValueEntity>().eq("spu_id", spuId));return attrValueEntityList;}

2.2,根据上一步中查询结果进一步确认是否可搜索

汇总所有属性Id,一次性查询出其中所有可搜索的属性Id。

List<Long> attrIds = baseAttrs.stream().map(ProductAttrValueEntity::getAttrId).collect(Collectors.toList());// 查询可搜索的规格属性List<Long> searchAttrIds = attrService.selectSearchableAttrs(attrIds);

对应的Service实现如下。

	public List<Long> selectSearchableAttrs(List<Long> attrIds) {List<Long> searchAttrIds = this.baseMapper.selectSearchAttrIds(attrIds);return searchAttrIds;}

对应的Sql如下。

<select id="selectSearchAttrIds" resultType="java.lang.Long">SELECT attr_id FROM pms_attr WHERE attr_id IN<foreach collection="attrIds" item="id" separator="," open="(" close=")">#{id}</foreach>AND search_type = 1</select>

注意,search_type = 1 表示这个属性可搜索。

2.3,将可搜索的属性封装到Java模型中

将前两步的结果结合起来,把spu下所有可搜索的属性封装到Java模型中。

        Set<Long> idSet = new HashSet<>(searchAttrIds);List<SkuEsModel.Attrs> attrsList = baseAttrs.stream().filter(item -> idSet.contains(item.getAttrId())).map(item -> {SkuEsModel.Attrs attrs = new SkuEsModel.Attrs();BeanUtils.copyProperties(item, attrs);return attrs;}).collect(Collectors.toList());

在这里插入图片描述

二,132-商城业务-商品上架-远程查询库存&泛型结果封装

1,开发目标

获取库存信息:

  • 通过远程调用库存服务,获取每个 SKU 的库存状态。
  • 库存状态用于确定 SKU 是否有货。

2,详细设计

  • ① 调用库存服务的接口
  • ② 库存服务根据sku_id查询库存量
  • ③ 根据查询结果填充模型

2.1 调用库存服务的接口

通过Feign调用库存服务的接口,并处理返回结果。

		List<Long> skuIdList = skuInfoEntities.stream().map(SkuInfoEntity::getSkuId).collect(Collectors.toList());R skuHasStock = wareFeignService.getSkuHasStock(skuIdList);TypeReference<List<SkuHasStockVo>> typeReference = new TypeReference<List<SkuHasStockVo>>() {};stockMap = skuHasStock.getData(typeReference).stream().collect(Collectors.toMap(SkuHasStockVo::getSkuId, item -> item.getHasStock()));

通过Feign将spu下所有的sku_id传递给库存服务。

2.2,库存服务根据sku_id查询库存量

① ware服务WareSkuController中定义供调用的接口。

	(value = "/hasStock")public R getSkuHasStock( List<Long> skuIds) {//skuId stockList<SkuHasStockVo> vos = wareSkuService.getSkuHasStock(skuIds);return R.ok().setData(vos);}

对应的Service实现如下。

	public List<SkuHasStockVo> getSkuHasStock(List<Long> skuIds) {List<SkuHasStockVo> skuHasStockVos = skuIds.stream().map(item -> {Long count = this.baseMapper.getSkuStock(item);SkuHasStockVo skuHasStockVo = new SkuHasStockVo();skuHasStockVo.setSkuId(item);skuHasStockVo.setHasStock(count == null?false:count > 0);return skuHasStockVo;}).collect(Collectors.toList());return skuHasStockVos;}

对应的Dao层Sql如下,逻辑非常简单,查询可用库存大于0的sku_id。

	<select id="listWareIdHasSkuStock" resultType="java.lang.Long">SELECTware_idFROMwms_ware_skuWHEREsku_id = #{skuId}AND stock - stock_locked > 0</select>

2.3,根据查询结果填充模型

调用库存接口查询到结果之后,从响应R中取出数据,注意因为R本质是一个Map,所以需要将Map中的数据序列化为我们需要的类型,这里使用了阿里的FastJson工具包中的TypeReference完成这个任务。

			R skuHasStock = wareFeignService.getSkuHasStock(skuIdList);TypeReference<List<SkuHasStockVo>> typeReference = new TypeReference<List<SkuHasStockVo>>() {};stockMap = skuHasStock.getData(typeReference).stream().collect(Collectors.toMap(SkuHasStockVo::getSkuId, item -> item.getHasStock()));
	public <T> T getData(TypeReference<T> typeReference) {Object data = get("data");	//默认是mapString jsonString = JSON.toJSONString(data);T t = JSON.parseObject(jsonString, typeReference);return t;}

拿到结果之后,在遍历Sku的循环体中填充库存信息。

			// 4.2 设置库存信息if (finalStockMap == null) {esModel.setHasStock(true);} else {esModel.setHasStock(finalStockMap.get(sku.getSkuId()));}

这样注意从响应中取得结果的方式,是开发中常用的技巧。

http://www.hkea.cn/news/664220/

相关文章:

  • 老虎淘客系统可以做网站吗江西省水文监测中心
  • 高港区企业网站建设快速建站教程
  • 怎样写企业网站建设方案北京网站seo招聘
  • 做蛋糕视频的网站软文广告范文
  • h5自适应网站模板下载网站换友链平台
  • 政府网站建设及管理规范各大搜索引擎入口
  • poedit pro wordpress免费网站推广优化
  • 市场营销产品推广策划方案seo合作代理
  • 东莞专业网站建设推广搜索引擎网络排名
  • 服务器做网站用什么环境好销售营销方案100例
  • 如何做DJ网站英文seo外链
  • 网站统计源码下载百度推广的步骤
  • 本地网站建设seo推广的方法
  • 东莞好的网站建设效果seo和sem分别是什么
  • 最新版wordpress背景手机网络优化软件
  • 丛台企业做网站推广免费建一级域名网站
  • 集宁网站建设免费网站推广网站破解版
  • 网站建设域名的购买有域名和服务器怎么建网站
  • 深圳有什么网站长沙百度seo
  • 台州企业网站模板建站怎么在百度上做公司网页
  • 烟台网站建设联系企汇互联专业网站维护收费标准
  • 网络客户服务平台搜索优化推广公司
  • 建设网站技术方案线上教育培训机构十大排名
  • 沈阳人流seo优化师就业前景
  • 开发区网站制作公司seo关键词有话要多少钱
  • 网站被篡改处理app拉新平台
  • 在线房屋设计网站seo推广平台服务
  • 电子政务门户网站建设代码短链接生成网址
  • 崔各庄地区网站建设百度非企渠道开户
  • 怎么用自己的电脑做网站服务器产品推广平台排行榜