diff --git a/shop/src/main/java/com/canrd/shop/service/impl/ProductServiceImpl.java b/shop/src/main/java/com/canrd/shop/service/impl/ProductServiceImpl.java index ccd6477..ca0dcbf 100644 --- a/shop/src/main/java/com/canrd/shop/service/impl/ProductServiceImpl.java +++ b/shop/src/main/java/com/canrd/shop/service/impl/ProductServiceImpl.java @@ -374,96 +374,74 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, ProductDO> im } private void suppleProducts(List<ProductDO> records) { - if (records == null || records.isEmpty()) { // 【修改1】先检查 records 是否为空 - return; - } - Boolean productPriceShow = switchControlService.getEnabledByName(SwitchControlConstants.PRODUCT_PRICE_SHOW); - - List<String> productIds = records.stream() - .map(ProductDO::getId) - .filter(Objects::nonNull) // 【修改2】确保 productId 不为 null - .collect(Collectors.toList()); - - if (productIds.isEmpty()) { // 【修改3】如果没有有效的 productId,则直接返回 - return; - } - + List<String> productIds = records.stream().map(ProductDO::getId).collect(Collectors.toList()); List<TicketTypeDO> tickeyTypeDOList = ticketTypeService.lambdaQuery() .func(wrapper -> { - if (CollUtil.isEmpty(productIds)) { + if (CollUtil.isEmpty(productIds)){ wrapper.apply("1!=1"); - } else { + }else { wrapper.in(TicketTypeDO::getProductId, productIds); } }) .list(); - - Map<String, BigDecimal> pId2ttMinPriceMap = new HashMap<>(); - Map<String, BigDecimal> pId3ttMaxPriceMap = new HashMap<>(); - + Map<String,BigDecimal> pId2ttMinPriceMap = new HashMap<>(); + Map<String,BigDecimal> pId3ttMaxPriceMap = new HashMap<>(); for (TicketTypeDO ticketTypeDO : tickeyTypeDOList) { - String productId = ticketTypeDO.getProductId(); - if (productId == null) continue; // 【修改4】确保 productId 不为空 - - pId2ttMinPriceMap.compute(productId, (key, val) -> - (val == null || ticketTypeDO.getPrice().compareTo(val) < 0) ? ticketTypeDO.getPrice() : val); - - pId3ttMaxPriceMap.compute(productId, (key, val) -> - (val == null || ticketTypeDO.getPrice().compareTo(val) > 0) ? ticketTypeDO.getPrice() : val); + if (Objects.isNull(pId2ttMinPriceMap.get(ticketTypeDO.getProductId()))){ + pId2ttMinPriceMap.put(ticketTypeDO.getProductId(), ticketTypeDO.getPrice()); + }else { + if (pId2ttMinPriceMap.get(ticketTypeDO.getProductId()).compareTo(ticketTypeDO.getPrice())>0){ + pId2ttMinPriceMap.put(ticketTypeDO.getProductId(), ticketTypeDO.getPrice()); + } + } + if (Objects.isNull(pId3ttMaxPriceMap.get(ticketTypeDO.getProductId()))){ + pId3ttMaxPriceMap.put(ticketTypeDO.getProductId(), ticketTypeDO.getPrice()); + }else { + if (pId3ttMaxPriceMap.get(ticketTypeDO.getProductId()).compareTo(ticketTypeDO.getPrice())<0){ + pId3ttMaxPriceMap.put(ticketTypeDO.getProductId(), ticketTypeDO.getPrice()); + } + } } records.forEach(product -> { - if (product == null || product.getId() == null) { // 【修改5】检查 product 是否为空 - return; - } - - if (productPriceShow) { - if (pId2ttMinPriceMap.containsKey(product.getId())) { // 【修改6】确保 key 存在 + if (productPriceShow){ + if (Objects.nonNull(pId2ttMinPriceMap.get(product.getId()))){ BigDecimal originMinPrice = pId2ttMinPriceMap.get(product.getId()) .divide(new BigDecimal("0.7"), 2, RoundingMode.HALF_UP) .divide(new BigDecimal("0.5"), 2, RoundingMode.HALF_UP) .multiply(new BigDecimal("0.148")) .setScale(2, RoundingMode.HALF_UP); - BigDecimal computedPrice = originMinPrice .multiply(new BigDecimal("0.5")) .setScale(2, RoundingMode.HALF_UP); - product.setPrice(computedPrice); product.setOriginMinPrice(originMinPrice); } - - if (pId3ttMaxPriceMap.containsKey(product.getId())) { // 【修改7】确保 key 存在 + if (Objects.nonNull(pId3ttMaxPriceMap.get(product.getId()))){ BigDecimal originMaxPrice = pId3ttMaxPriceMap.get(product.getId()) .divide(new BigDecimal("0.7"), 2, RoundingMode.HALF_UP) .divide(new BigDecimal("0.5"), 2, RoundingMode.HALF_UP) .multiply(new BigDecimal("0.148")) .setScale(2, RoundingMode.HALF_UP); - BigDecimal computedPrice = originMaxPrice .multiply(new BigDecimal("0.5")) .setScale(2, RoundingMode.HALF_UP); - product.setMaxPrice(computedPrice); product.setOriginMaxPrice(originMaxPrice); } } - - // 解析 productimageliststore - if (product.getProductimageliststore() != null) { // 【修改8】确保不为 null + //将productDO的productimageliststore解析为map + if (product.getProductimageliststore() != null) { List<Map> maps = JSON.parseArray(product.getProductimageliststore(), Map.class); - if (maps != null && !maps.isEmpty()) { // 【修改9】确保 maps 不是空的 + if (CollUtil.isNotEmpty(maps)) { Map map = maps.get(0); - if (map != null && map.get("fileKey") != null) { // 【修改10】确保 map 及 fileKey 存在 - product.setImageFileKey(map.get("fileKey").toString()); - } + product.setImageFileKey(map.get("fileKey").toString()); } } }); } - @Override public ServerResult listBySimilar(ProductQueryVO productQueryVO){ if(StringUtils.isBlank(productQueryVO.getKeyword())){ @@ -503,7 +481,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, ProductDO> im if (StringUtils.isNotBlank(productQueryVO.getKeyword())) { // String keyword = productQueryVO.getKeyword().trim(); - // 先精准匹配 + // 先精确匹配完整的关键字 List<TicketTypeDO> tickeyTypeDOList = ticketTypeService.lambdaQuery() .like(TicketTypeDO::getRank, keyword) .list(); @@ -518,29 +496,23 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, ProductDO> im } if (productIds.isEmpty()) { - // 如果没有匹配到,进行分词处理 - String[] keywords = Arrays.stream(keyword.split("\\s+")) - .filter(StringUtils::isNotBlank) - .toArray(String[]::new); + // 如果没有匹配到,分词处理 + String[] keywords = keyword.split("\\s+"); queryWapper.and(subQueryWapper -> { - // **必须包含所有分词** + // 查询包含所有分词的记录 for (String key : keywords) { - subQueryWapper.like("p.name", key); + subQueryWapper.like("p.name", key).or(); } }); - } else { Set<String> finalProductIds = productIds; queryWapper.and(subQueryWapper -> { - subQueryWapper.like("p.name", keyword) - .or() - .in(CollUtil.isNotEmpty(finalProductIds), "p.id", finalProductIds); + subQueryWapper.like("p.name", keyword).or().in(CollUtil.isNotEmpty(finalProductIds), "p.id", finalProductIds); }); } } - List<ProductDO> productDOS = this.baseMapper.queryList(queryWapper); // Split the keyword into individual words String[] keywords = keyword.split("\\s+"); diff --git a/shop/src/main/resources/application.yml b/shop/src/main/resources/application.yml index 09aa150..bc77eaf 100644 --- a/shop/src/main/resources/application.yml +++ b/shop/src/main/resources/application.yml @@ -12,7 +12,7 @@ spring: host: smtp.mxhichina.com port: 465 username: overseas@canrd.com - password: Canrd@overseas + password: cccrd4C10bZuPjtT protocol: smtps properties: mail: