Commit cf3b3b40 by 王祖波

修改为支持批量查询商品

parent ec6fdba2
package com.gic.haoban.manage.service.service.content.adaptor;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.store.goods.dto.goods.GoodsInfoSimpleDTO;
import com.gic.store.goods.dto.goods.GoodsSpuInfoDTO;
import com.gic.store.goods.service.GoodsCenterApiService;
import com.gic.store.goods.service.GoodsInfoOutApiService;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
......@@ -24,6 +26,8 @@ public class GoodsInfoAdaptor {
@Autowired
private GoodsCenterApiService goodsCenterApiService;
@Autowired
private GoodsInfoOutApiService goodsInfoOutApiService;
public Map<String, GoodsSpuInfoDTO> queryGoodsMinPrice(String enterpriseId, List<String> goodsIds) {
ServiceResponse<List<GoodsSpuInfoDTO>> response = goodsCenterApiService.queryGoodsMinPrice(enterpriseId, goodsIds);
......@@ -35,5 +39,20 @@ public class GoodsInfoAdaptor {
.collect(Collectors.toMap(GoodsSpuInfoDTO::getGoodsId, Function.identity(), (v1, v2) -> v1));
}
public Map<String, GoodsInfoSimpleDTO> queryGoodsAndMinPrice(String enterpriseId, List<String> goodsIds) {
ServiceResponse<List<GoodsInfoSimpleDTO>> response = goodsInfoOutApiService.queryGoodsSimpleInfo(goodsIds);
if (!response.isSuccess() || CollectionUtils.isEmpty(response.getResult())) {
return Collections.emptyMap();
}
Map<String, GoodsSpuInfoDTO> goodsMinPriceMap = queryGoodsMinPrice(enterpriseId, goodsIds);
return response.getResult()
.stream()
.peek(item->{
GoodsSpuInfoDTO goodsSpuInfoDTO = goodsMinPriceMap.get(item.getGoodsId());
if (goodsSpuInfoDTO != null && goodsSpuInfoDTO.getMinPrice() != null) {
item.setSalePrice(goodsSpuInfoDTO.getMinPrice());
}
}).collect(Collectors.toMap(GoodsInfoSimpleDTO::getGoodsId, Function.identity(), (v1, v2) -> v1));
}
}
......@@ -20,6 +20,8 @@ import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordMessa
import com.gic.store.goods.dto.goods.GoodsInfoSimpleDTO;
import com.gic.store.goods.dto.goods.GoodsSpuInfoDTO;
import com.gic.store.goods.service.GoodsInfoOutApiService;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -88,6 +90,26 @@ public class InteractRecordBuilder {
return stringBuilder.toString();
}
public Map<String,GoodsInfoSimpleDTO> buildGoodsMap(String enterprieseId,List<TabHaobanInteractRecord> list) {
Set<String> goodsIdSet = Sets.newHashSet();
list.forEach(item -> {
String extendInfo = Optional.ofNullable(item.getExtendInfo()).orElse("{}");
InteractRecordExtendInfoBO extendInfoBO = JSONObject.parseObject(extendInfo, InteractRecordExtendInfoBO.class);
List<String> goodsIds = extendInfoBO.getGoodsIds();
if (CollectionUtils.isNotEmpty(goodsIds)) {
goodsIdSet.addAll(goodsIds);
}
List<List<String>> groupGoodsIds = extendInfoBO.getGroupGoodsIds();
if (CollectionUtils.isNotEmpty(groupGoodsIds)) {
goodsIdSet.addAll(groupGoodsIds.stream().flatMap(Collection::stream).collect(Collectors.toList()));
}
});
if (CollectionUtils.isEmpty(goodsIdSet)) {
return new HashMap<>();
}
return goodsInfoAdaptor.queryGoodsAndMinPrice(enterprieseId,Lists.newArrayList(goodsIdSet));
}
/**
* 互动记录转换扩展信息
......@@ -95,7 +117,7 @@ public class InteractRecordBuilder {
* @param interactRecord
* @return
*/
public InteractRecordExtendInfoBO convertExtendInfo(TabHaobanInteractRecord interactRecord) {
public InteractRecordExtendInfoBO convertExtendInfo(TabHaobanInteractRecord interactRecord,Map<String, GoodsInfoSimpleDTO> goodsMap) {
if (interactRecord == null) {
log.info("互动记录为空");
return null;
......@@ -110,7 +132,7 @@ public class InteractRecordBuilder {
|| MaterialInteractRecordEventType.ADD_SHOPPING_CART.getCode().equals(interactRecord.getEventType())
|| MaterialInteractRecordEventType.ORDER.getCode().equals(interactRecord.getEventType())
|| MaterialInteractRecordEventType.VISIT_MATERIAL.getCode().equals(interactRecord.getEventType())) {
convertGroupGoods(interactRecord.getEnterpriseId(), extendInfo);
convertGroupGoods(interactRecord.getEnterpriseId(), extendInfo, goodsMap);
// 浏览商品事件
List<String> visitGoodsIds = extendInfo.getGoodsIds();
if (CollectionUtils.isEmpty(visitGoodsIds)) {
......@@ -119,7 +141,7 @@ public class InteractRecordBuilder {
}
// 拼接商品信息
List<InteractRecordExtendInfoBO.ExtendGoodsInfo> extendGoodsInfos =
this.convertGoodsInfo(visitGoodsIds, interactRecord.getEnterpriseId());
this.convertGoodsInfo(visitGoodsIds, interactRecord.getEnterpriseId(),goodsMap);
extendInfo.setExtendGoodsInfos(extendGoodsInfos);
extendInfo.setInvalidGoodsNum(visitGoodsIds.size() - extendGoodsInfos.size());
return extendInfo;
......@@ -140,13 +162,13 @@ public class InteractRecordBuilder {
return extendInfo;
}
private void convertGroupGoods(String enterpriseId, InteractRecordExtendInfoBO extendInfo) {
private void convertGroupGoods(String enterpriseId, InteractRecordExtendInfoBO extendInfo,Map<String, GoodsInfoSimpleDTO> goodsMap) {
List<List<String>> groupGoodsIds = extendInfo.getGroupGoodsIds();
// 组装商品组数据
if (CollectionUtils.isNotEmpty(groupGoodsIds)) {
List<String> groupGoodsIdList = groupGoodsIds.stream().flatMap(Collection::stream).collect(Collectors.toList());
List<InteractRecordExtendInfoBO.ExtendGoodsInfo> extendGoodsInfos =
this.convertGoodsInfo(groupGoodsIdList, enterpriseId);
this.convertGoodsInfo(groupGoodsIdList, enterpriseId,goodsMap);
if (CollectionUtils.isNotEmpty(extendGoodsInfos)) {
Map<String, InteractRecordExtendInfoBO.ExtendGoodsInfo> goodsInfoMap = extendGoodsInfos.stream()
.collect(Collectors.toMap(InteractRecordExtendInfoBO.ExtendGoodsInfo::getGoodsId, Function.identity(),(e,x)->e));
......@@ -167,23 +189,37 @@ public class InteractRecordBuilder {
}
}
private List<InteractRecordExtendInfoBO.ExtendGoodsInfo> convertGoodsInfo(List<String> visitGoodsIds, String enterpriseId) {
private List<InteractRecordExtendInfoBO.ExtendGoodsInfo> convertGoodsInfo(List<String> visitGoodsIds, String enterpriseId,Map<String, GoodsInfoSimpleDTO> goodsMap) {
if (CollectionUtils.isEmpty(visitGoodsIds)) {
return Collections.emptyList();
}
ServiceResponse<List<GoodsInfoSimpleDTO>> serviceResponse = goodsInfoOutApiService.queryGoodsSimpleInfo(visitGoodsIds);
// 1:已上线,2:未上线,3:回收站
if (!serviceResponse.isSuccess()) {
log.info("查询商品异常 {}", JSON.toJSONString(serviceResponse));
return Collections.emptyList();
}
if (CollectionUtils.isEmpty(serviceResponse.getResult())) {
log.info("查询商品为空 {}", JSON.toJSONString(serviceResponse));
return Collections.emptyList();
List<GoodsInfoSimpleDTO> list = new ArrayList<>();
Map<String, GoodsSpuInfoDTO> goodsMinPriceMap;
// 修改为支持外部先批量查询
if (goodsMap == null) {
ServiceResponse<List<GoodsInfoSimpleDTO>> serviceResponse = goodsInfoOutApiService.queryGoodsSimpleInfo(visitGoodsIds);
// 1:已上线,2:未上线,3:回收站
if (!serviceResponse.isSuccess()) {
log.info("查询商品异常 {}", JSON.toJSONString(serviceResponse));
return Collections.emptyList();
}
if (CollectionUtils.isEmpty(serviceResponse.getResult())) {
log.info("查询商品为空 {}", JSON.toJSONString(serviceResponse));
return Collections.emptyList();
}
list = serviceResponse.getResult();
goodsMinPriceMap = goodsInfoAdaptor.queryGoodsMinPrice(enterpriseId, visitGoodsIds);
}else {
goodsMinPriceMap = new HashMap<>();
for (String goodsId : visitGoodsIds) {
GoodsInfoSimpleDTO goodsInfoSimpleDTO = goodsMap.get(goodsId);
if (goodsInfoSimpleDTO != null) {
list.add(goodsInfoSimpleDTO);
}
}
}
Map<String, GoodsSpuInfoDTO> goodsMinPriceMap = goodsInfoAdaptor.queryGoodsMinPrice(enterpriseId, visitGoodsIds);
List<Integer> excludeStatus = Arrays.asList(0, 3);
return serviceResponse.getResult()
return list
.stream()
.filter(item -> !excludeStatus.contains(item.getStatus()))
.map(item -> {
......@@ -310,7 +346,7 @@ public class InteractRecordBuilder {
map.forEach((wxaLinkId, groupIds) -> {
InteractRecordExtendInfoBO extendInfoBO = new InteractRecordExtendInfoBO();
extendInfoBO.setGroupGoodsIds(groupIds);
convertGroupGoods(enterpriseId, extendInfoBO);
convertGroupGoods(enterpriseId, extendInfoBO,null);
extendInfoBOMap.put(wxaLinkId, extendInfoBO);
});
return extendInfoBOMap;
......
......@@ -2,6 +2,7 @@ package com.gic.haoban.manage.service.service.content.impl;
import cn.hutool.core.date.DateTime;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.commons.util.DateUtil;
import com.gic.commons.util.UniqueIdUtils;
......@@ -16,7 +17,10 @@ import com.gic.haoban.manage.service.pojo.qo.content.InteractRecordQO;
import com.gic.haoban.manage.service.service.content.InteractRecordService;
import com.gic.haoban.manage.service.service.content.PotentialCustomerService;
import com.gic.haoban.manage.service.service.content.adaptor.InteractRecordBuilder;
import com.gic.store.goods.dto.goods.GoodsInfoSimpleDTO;
import com.github.pagehelper.PageHelper;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -96,6 +100,9 @@ public class InteractRecordServiceImpl implements InteractRecordService {
log.info("查询互动记录数据为空 {}", JSON.toJSONString(interactRecordQO));
return new Page<>();
}
// 修改为批量查询
Map<String, GoodsInfoSimpleDTO> goodsMap = interactRecordBuilder.buildGoodsMap(interactRecordQO.getEnterpriseId(), pageResult.getResult());
Page<InteractRecordBO> result = new Page<>();
result.setTotalCount((int) pageResult.getTotal());
List<InteractRecordBO> recordBos = pageResult.getResult()
......@@ -104,7 +111,7 @@ public class InteractRecordServiceImpl implements InteractRecordService {
InteractRecordBO temp = new InteractRecordBO();
BeanUtils.copyProperties(item, temp);
temp.setRecordDesc(interactRecordBuilder.buildDesc(item));
temp.setExtendInfo(interactRecordBuilder.convertExtendInfo(item));
temp.setExtendInfo(interactRecordBuilder.convertExtendInfo(item,goodsMap));
interactRecordBuilder.warpRelationGoodsNum(temp);
return temp;
})
......@@ -113,6 +120,8 @@ public class InteractRecordServiceImpl implements InteractRecordService {
return result;
}
/**
* 统计总数
*
......@@ -293,7 +302,7 @@ public class InteractRecordServiceImpl implements InteractRecordService {
InteractRecordBO temp = new InteractRecordBO();
BeanUtils.copyProperties(item, temp);
temp.setRecordDesc(interactRecordBuilder.buildDesc(item));
temp.setExtendInfo(interactRecordBuilder.convertExtendInfo(item));
temp.setExtendInfo(interactRecordBuilder.convertExtendInfo(item,null));
interactRecordBuilder.warpRelationGoodsNum(temp);
return temp;
})
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment