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

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

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