Commit cf3b3b40 by 王祖波

修改为支持批量查询商品

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