提交 13028f8b 作者: zhenjie 提交者: 余乾开

根据多渠道标签查询商品规格价格

上级 28db4673
...@@ -118,4 +118,6 @@ public interface ProductDao { ...@@ -118,4 +118,6 @@ public interface ProductDao {
ProductSpecPriceDO getProductSpecPriceById(Integer id); ProductSpecPriceDO getProductSpecPriceById(Integer id);
List<DirectoryDO> productDirectoryList(); List<DirectoryDO> productDirectoryList();
List<ProductSpecPriceDO> listAllProductSpecPriceByType(@Param("prodSkuSpecIds") Set<Integer> prodSkuSpecIds);
} }
...@@ -7,10 +7,11 @@ import lombok.Data; ...@@ -7,10 +7,11 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
import java.util.Set; import java.util.Set;
/** /**
* author:zhenjie * @author:zhenjie
* Date:2022/10/18 * Date:2022/10/18
* time:21:45 * time:21:45
*/ */
...@@ -18,11 +19,11 @@ import java.util.Set; ...@@ -18,11 +19,11 @@ import java.util.Set;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
//@ApiModel(value = "com.mmc.csf.mall.qo.MallOrderGoodsInfoQO", description = "订单查询商品信息QO")
public class MallOrderGoodsInfoQO implements Serializable { public class MallOrderGoodsInfoQO implements Serializable {
private static final long serialVersionUID = -3807569067697485137L; private static final long serialVersionUID = -3807569067697485137L;
private Integer mallUserId; private Integer userAccountId;
private Integer cooperationTagId; private Integer cooperationTagId;
private List<Integer> cooperationTagIds;
private Set<Integer> mallProdSkuSpecIds; private Set<Integer> mallProdSkuSpecIds;
private Set<Integer> mallIndstSkuSpecIds; private Set<Integer> mallIndstSkuSpecIds;
} }
package com.mmc.pms.service.Impl; package com.mmc.pms.service.Impl;
import com.alibaba.fastjson2.JSONObject;
import com.mmc.pms.common.ResultBody; import com.mmc.pms.common.ResultBody;
import com.mmc.pms.common.ResultEnum; import com.mmc.pms.common.ResultEnum;
import com.mmc.pms.dao.GoodsInfoDao; import com.mmc.pms.dao.GoodsInfoDao;
...@@ -25,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -25,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* @author 23214 * @author 23214
...@@ -944,22 +946,12 @@ public class GoodsInfoServiceImpl implements GoodsInfoService { ...@@ -944,22 +946,12 @@ public class GoodsInfoServiceImpl implements GoodsInfoService {
// 查询渠道等级对应的商品价格 // 查询渠道等级对应的商品价格
Set<Integer> prodSkuSpecIds = Set<Integer> prodSkuSpecIds =
productDao.listProductSpecIds(mallOrderGoodsInfoQO.getMallProdSkuSpecIds()); productDao.listProductSpecIds(mallOrderGoodsInfoQO.getMallProdSkuSpecIds());
List<ProductSpecPriceDO> productSpecPriceDOS =
productDao.listProductSpecPrice(mallOrderGoodsInfoQO.getCooperationTagId(), prodSkuSpecIds);
// 查询商品信息 // 查询商品信息
List<OrderGoodsProdDTO> orderGoodsProdDTOList = List<OrderGoodsProdDTO> orderGoodsProdDTOList =
productDao.listProdGoodsSkuInfo(mallOrderGoodsInfoQO); productDao.listProdGoodsSkuInfo(mallOrderGoodsInfoQO);
if (!CollectionUtils.isEmpty(productSpecPriceDOS)) { //填充价格
// 填充渠道价格 List<ProductSpecPriceDO> allProductSpecPriceDOS = productDao.listAllProductSpecPriceByType(prodSkuSpecIds);
this.fillOrderGoodsProdPrice(orderGoodsProdDTOList, productSpecPriceDOS, prodSkuSpecIds); this.buildProductSpecPrice(orderGoodsProdDTOList, allProductSpecPriceDOS, mallOrderGoodsInfoQO.getCooperationTagIds());
}
// 商品没有设置渠道价格的,按照市场价设置
if (!CollectionUtils.isEmpty(prodSkuSpecIds)) {
// 查询市场价格,tagInfoId为0
List<ProductSpecPriceDO> prodMarketPrice = productDao.listProductSpecPrice(0, prodSkuSpecIds);
// 填充市场价格
this.fillOrderGoodsProdPrice(orderGoodsProdDTOList, prodMarketPrice, prodSkuSpecIds);
}
// 还需配置商品规格金额, 单个商品skuSpecAmount, 全部小sku金额 // 还需配置商品规格金额, 单个商品skuSpecAmount, 全部小sku金额
List<Integer> goodsIds = List<Integer> goodsIds =
orderGoodsProdDTOList.stream() orderGoodsProdDTOList.stream()
...@@ -991,36 +983,26 @@ public class GoodsInfoServiceImpl implements GoodsInfoService { ...@@ -991,36 +983,26 @@ public class GoodsInfoServiceImpl implements GoodsInfoService {
/** /**
* 填充产品规格价格 * 填充产品规格价格
*
* @param orderGoodsProdDTOList * @param orderGoodsProdDTOList
* @param productSpecPriceDOS * @param allProductSpecPriceDOS
* @param prodSkuSpecIds * @param cooperationTagIds
* @return
*/ */
private List<OrderGoodsProdDTO> fillOrderGoodsProdPrice( private void buildProductSpecPrice(List<OrderGoodsProdDTO> orderGoodsProdDTOList, List<ProductSpecPriceDO> allProductSpecPriceDOS,
List<OrderGoodsProdDTO> orderGoodsProdDTOList, List<Integer> cooperationTagIds){
List<ProductSpecPriceDO> productSpecPriceDOS, Map<Integer, List<ProductSpecPriceDO>> productSpecPriceMap = allProductSpecPriceDOS.stream()
Set<Integer> prodSkuSpecIds) { .collect(Collectors.groupingBy(ProductSpecPriceDO::getProductSpecId));
for (OrderGoodsProdDTO orderGoodsProdDTO : orderGoodsProdDTOList) { for (OrderGoodsProdDTO orderGoodsProdDTO : orderGoodsProdDTOList) {
for (OrderGoodsProdDetailDTO orderGoodsProdDetailDTO : for (OrderGoodsProdDetailDTO prodDetailDTO : orderGoodsProdDTO.getOrderGoodsProdDetailDTOS()) {
orderGoodsProdDTO.getOrderGoodsProdDetailDTOS()) { List<ProductSpecPriceDO> specPriceDOS = productSpecPriceMap.get(prodDetailDTO.getProductSpecId());
// 配置价格 if (CollectionUtils.isNotEmpty(specPriceDOS)) {
for (ProductSpecPriceDO productSpecPriceDO : productSpecPriceDOS) { List<ProductSpecPriceDO> tempSpecPrice = specPriceDOS.stream()
// 找到规格对应的价格 .filter(d -> cooperationTagIds.contains(d.getCooperationTag()))
if (productSpecPriceDO .sorted(Comparator.comparing(ProductSpecPriceDO::getPrice))
.getProductSpecId() .collect(Collectors.toList());
.toString() prodDetailDTO.setUnitPrice(tempSpecPrice.get(0).getPrice());
.equals(orderGoodsProdDetailDTO.getProductSpecId().toString())) {
orderGoodsProdDetailDTO.setUnitPrice(productSpecPriceDO.getPrice());
// 配置价格后移除,剩余没有配置的
prodSkuSpecIds.removeIf(
d -> d.toString().equals(orderGoodsProdDetailDTO.getProductSpecId().toString()));
break;
}
} }
} }
} }
return orderGoodsProdDTOList;
} }
@Override @Override
......
...@@ -521,4 +521,18 @@ ...@@ -521,4 +521,18 @@
OR (`type` = 0 AND `show` LIKE '%4%') OR (`type` = 0 AND `show` LIKE '%4%')
AND is_deleted = 0 AND is_deleted = 0
</select> </select>
<select id="listAllProductSpecPriceByType" resultType="com.mmc.pms.entity.ProductSpecPriceDO">
SELECT
id,
product_spec_id productSpecId,
cooperation_tag cooperationTag,
price
FROM
product_spec_price
WHERE `type` = 0 and product_spec_id in (
<foreach collection="prodSkuSpecIds" separator="," index="index" item="d">
#{d}
</foreach>)
</select>
</mapper> </mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论