Commit 6048cbb280b859484d4ae3c9fc9989338f170400

Authored by 曾国涛
1 parent 926db6dd

refactor(product): 重构产品列表查询逻辑

- 提取公共方法 suppleProducts 补充产品信息- 优化产品价格显示逻辑,移除重复代码
- 统一处理产品图片列表解析
- 删除冗余变量,简化代码结构
shop/src/main/java/com/canrd/shop/service/impl/ProductServiceImpl.java
... ... @@ -160,10 +160,39 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, ProductDO> im
160 160 }
161 161 Page page = new Page<>(productQueryVO.getPageNo(), productQueryVO.getPageSize());
162 162 IPage<ProductDO> iPage = productMapper.selectAll(page,queryWapper);
  163 + suppleProducts(iPage.getRecords());
163 164 productQueryVO.setTotal(Long.valueOf(iPage.getTotal()).intValue());
164 165 return ServerResult.success().setData(PageUtils.getPageReturn(iPage.getRecords(), productQueryVO));
165 166 }
166 167  
  168 + private void suppleProducts(List<ProductDO> records) {
  169 + Boolean productPriceShow = switchControlService.getEnabledByName(SwitchControlConstants.PRODUCT_PRICE_SHOW);
  170 + List<String> productIds = records.stream().map(ProductDO::getId).collect(Collectors.toList());
  171 + List<TicketTypeDO> tickeyTypeDOList = ticketTypeService.lambdaQuery().in(TicketTypeDO::getProductId, productIds).list();
  172 + Map<String,List<TicketTypeDO>> pId2ttDOsMap = tickeyTypeDOList.stream().collect(Collectors.groupingBy(TicketTypeDO::getProductId));
  173 + Map<String,BigDecimal> pId2ttMinPriceMap = new HashMap<>();
  174 + for (TicketTypeDO ticketTypeDO : tickeyTypeDOList) {
  175 + if (Objects.isNull(pId2ttMinPriceMap.get(ticketTypeDO.getProductId()))){
  176 + pId2ttMinPriceMap.put(ticketTypeDO.getProductId(), ticketTypeDO.getPrice());
  177 + }else {
  178 + if (pId2ttMinPriceMap.get(ticketTypeDO.getProductId()).compareTo(ticketTypeDO.getPrice())>0){
  179 + pId2ttMinPriceMap.put(ticketTypeDO.getProductId(), ticketTypeDO.getPrice());
  180 + }
  181 + }
  182 + }
  183 + records.forEach(product -> {
  184 + if (productPriceShow){
  185 + if (Objects.nonNull(pId2ttMinPriceMap.get(product.getId()))){
  186 + product.setPrice(pId2ttMinPriceMap.get(product.getId()));
  187 + }
  188 + }
  189 + //将productDO的productimageliststore解析为map
  190 + List<Map> maps = JSON.parseArray(product.getProductimageliststore(), Map.class);
  191 + Map map = maps.get(0);
  192 + product.setImageFileKey(map.get("fileKey").toString());
  193 + });
  194 + }
  195 +
167 196 @Override
168 197 public ServerResult listBySimilar(ProductQueryVO productQueryVO){
169 198 if(StringUtils.isBlank(productQueryVO.getKeyword())){
... ... @@ -181,24 +210,15 @@ public class ProductServiceImpl extends ServiceImpl&lt;ProductMapper, ProductDO&gt; im
181 210 }
182 211 Set<String> productIds = null;
183 212 Map<String,List<TicketTypeDO>> pId2ttDOsMap = null;
184   - Map<String,BigDecimal> pId2ttMinPriceMap = null;
185 213 boolean needLikeMatch = false;
186 214 if(StringUtils.isNotBlank(productQueryVO.getKeyword())){
187 215 List<TicketTypeDO> tickeyTypeDOList = ticketTypeService.lambdaQuery().like(TicketTypeDO::getRank, productQueryVO.getKeyword()).list();
188 216 productIds = tickeyTypeDOList.stream().map(TicketTypeDO::getProductId).collect(Collectors.toSet());
189 217 needLikeMatch = true;
190 218 pId2ttDOsMap = new HashMap<>();
191   - pId2ttMinPriceMap = new HashMap<>();
192 219 for (TicketTypeDO ticketTypeDO : tickeyTypeDOList) {
193 220 pId2ttDOsMap.computeIfAbsent(ticketTypeDO.getProductId(), k -> new ArrayList<>());
194 221 pId2ttDOsMap.get(ticketTypeDO.getProductId()).add(ticketTypeDO);
195   - if (Objects.isNull(pId2ttMinPriceMap.get(ticketTypeDO.getProductId()))){
196   - pId2ttMinPriceMap.put(ticketTypeDO.getProductId(), ticketTypeDO.getPrice());
197   - }else {
198   - if (pId2ttMinPriceMap.get(ticketTypeDO.getProductId()).compareTo(ticketTypeDO.getPrice())>0){
199   - pId2ttMinPriceMap.put(ticketTypeDO.getProductId(), ticketTypeDO.getPrice());
200   - }
201   - }
202 222 }
203 223 Set<String> finalProductIds = productIds;
204 224 queryWapper.and(subQueryWapper -> {
... ... @@ -216,13 +236,7 @@ public class ProductServiceImpl extends ServiceImpl&lt;ProductMapper, ProductDO&gt; im
216 236 }
217 237 });
218 238 List<ProductDO> similarProductList = Lists.newArrayList();
219   - Boolean productPriceShow = switchControlService.getEnabledByName(SwitchControlConstants.PRODUCT_PRICE_SHOW);
220 239 for(ProductDO product:productDOS){
221   - if (productPriceShow){
222   - if (Objects.nonNull(pId2ttMinPriceMap.get(product.getId()))){
223   - product.setPrice(pId2ttMinPriceMap.get(product.getId()));
224   - }
225   - }
226 240 if(accurateProductIdSet.contains(product.getId())){
227 241 continue;
228 242 }
... ... @@ -251,12 +265,7 @@ public class ProductServiceImpl extends ServiceImpl&lt;ProductMapper, ProductDO&gt; im
251 265 List<ProductDO> allProductList = Lists.newArrayList();
252 266 allProductList.addAll(accurateProducts);
253 267 allProductList.addAll(similarProductList);
254   - allProductList.forEach(productDO -> {
255   - //将productDO的productimageliststore解析为map
256   - List<Map> maps = JSON.parseArray(productDO.getProductimageliststore(), Map.class);
257   - Map map = maps.get(0);
258   - productDO.setImageFileKey(map.get("fileKey").toString());
259   - });
  268 + suppleProducts(allProductList);
260 269 return pager(productQueryVO,allProductList);
261 270 }
262 271  
... ...