Merge remote-tracking branch 'origin/master'

This commit is contained in:
张松 2025-04-07 09:40:44 +08:00
commit 3ceeaabdfe
3 changed files with 26 additions and 7 deletions

View File

@ -47,4 +47,8 @@ public class ShopGroupProductVo implements Serializable {
* 商品列表 * 商品列表
*/ */
private List<ShopProductVo> productList; private List<ShopProductVo> productList;
/**
* 排序方式 0-默认; 1-价格从高到低; 2-销量由高到低;
*/
private String sortMode;
} }

View File

@ -105,4 +105,8 @@ public class ShopProductVo implements Serializable {
*/ */
@JSONField(serialize = false) @JSONField(serialize = false)
private LocalTime endTime; private LocalTime endTime;
/**
* 排序
*/
private Integer sort;
} }

View File

@ -37,10 +37,7 @@ import java.time.DayOfWeek;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalTime; import java.time.LocalTime;
import java.time.format.TextStyle; import java.time.format.TextStyle;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -77,7 +74,10 @@ public class UProductServiceImpl extends ServiceImpl<ProductMapper, Product> imp
@Override @Override
@Cacheable(value = CacheConstant.USER_CLIENT_GROUPS_PRODUCT, key = "#shopId", unless = "#result.isEmpty()") @Cacheable(value = CacheConstant.USER_CLIENT_GROUPS_PRODUCT, key = "#shopId", unless = "#result.isEmpty()")
public List<ShopGroupProductVo> queryGroupProductList(Long shopId) { public List<ShopGroupProductVo> queryGroupProductList(Long shopId) {
List<ShopGroupProductVo> groupList = prodGroupMapper.selectListByQueryAs(query().select(ProdGroup::getId, ProdGroup::getName, ProdGroup::getUseTime, ProdGroup::getSaleStartTime, ProdGroup::getSaleEndTime).eq(ProdGroup::getShopId, shopId).eq(ProdGroup::getStatus, StatusEnum.ENABLED.value()).orderBy(ProdGroup::getSort, true), ShopGroupProductVo.class); List<ShopGroupProductVo> groupList = prodGroupMapper.selectListByQueryAs(query().select(ProdGroup::getId,
ProdGroup::getName, ProdGroup::getUseTime, ProdGroup::getSaleStartTime, ProdGroup::getSaleEndTime)
.eq(ProdGroup::getShopId, shopId).eq(ProdGroup::getStatus, StatusEnum.ENABLED.value())
.orderBy(ProdGroup::getSort, true), ShopGroupProductVo.class);
List<ShopProductVo> productAllList = productMapper.selectGroupProductList(shopId); List<ShopProductVo> productAllList = productMapper.selectGroupProductList(shopId);
productAllList.forEach(item -> { productAllList.forEach(item -> {
item.setIsSaleTime(calcIsSaleTime(item.getDays(), item.getStartTime(), item.getEndTime())); item.setIsSaleTime(calcIsSaleTime(item.getDays(), item.getStartTime(), item.getEndTime()));
@ -89,8 +89,11 @@ public class UProductServiceImpl extends ServiceImpl<ProductMapper, Product> imp
}); });
Map<Long, ShopProductVo> productKv = productAllList.stream().collect(Collectors.toMap(ShopProductVo::getId, shopProductVo -> shopProductVo)); Map<Long, ShopProductVo> productKv = productAllList.stream().collect(Collectors.toMap(ShopProductVo::getId, shopProductVo -> shopProductVo));
List<Long> prodGroupIdList = groupList.stream().map(ShopGroupProductVo::getId).distinct().toList(); List<Long> prodGroupIdList = groupList.stream().map(ShopGroupProductVo::getId).distinct().toList();
List<ProdGroupRelationDTO> relationList = prodGroupIdList.isEmpty() ? new ArrayList<>() : prodGroupRelationMapper.selectListByQueryAs(query().select(ProdGroupRelation::getProdGroupId, ProdGroupRelation::getProductId).in(ProdGroupRelation::getProdGroupId, prodGroupIdList), ProdGroupRelationDTO.class); List<ProdGroupRelationDTO> relationList = prodGroupIdList.isEmpty() ? new ArrayList<>() :
Map<Long, List<Long>> relationKv = relationList.stream().collect(Collectors.groupingBy(ProdGroupRelationDTO::getProdGroupId, Collectors.mapping(ProdGroupRelationDTO::getProductId, Collectors.toList()))); prodGroupRelationMapper.selectListByQueryAs(query().select(ProdGroupRelation::getProdGroupId, ProdGroupRelation::getProductId)
.in(ProdGroupRelation::getProdGroupId, prodGroupIdList), ProdGroupRelationDTO.class);
Map<Long, List<Long>> relationKv = relationList.stream().collect(Collectors.groupingBy(ProdGroupRelationDTO::getProdGroupId,
Collectors.mapping(ProdGroupRelationDTO::getProductId, Collectors.toList())));
for (ShopGroupProductVo group : groupList) { for (ShopGroupProductVo group : groupList) {
List<Long> productIdList = relationKv.get(group.getId()); List<Long> productIdList = relationKv.get(group.getId());
if (CollUtil.isEmpty(productIdList)) { if (CollUtil.isEmpty(productIdList)) {
@ -108,6 +111,14 @@ public class UProductServiceImpl extends ServiceImpl<ProductMapper, Product> imp
productList.parallelStream().forEach(product -> { productList.parallelStream().forEach(product -> {
product.setIsSaleTime(isSaleTime); product.setIsSaleTime(isSaleTime);
}); });
// switch (group.getSortMode()) {
// case "0" -> productList.sort(Comparator.comparing(ShopProductVo::getSalePrice));
// case "1" -> productList.sort((o1, o2) -> o2.getSalePrice().compareTo(o1.getSalePrice()));
// case "2" -> productList.sort((o1, o2) -> o2.getSort().compareTo(o1.getSort()));
//
// }
productList.sort(Comparator.comparing(ShopProductVo::getSalePrice));
group.setProductList(productList); group.setProductList(productList);
} }
return groupList.stream().filter(group -> CollUtil.isNotEmpty(group.getProductList())).toList(); return groupList.stream().filter(group -> CollUtil.isNotEmpty(group.getProductList())).toList();