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;
/**
* 排序方式 0-默认; 1-价格从高到低; 2-销量由高到低;
*/
private String sortMode;
}

View File

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

View File

@ -37,10 +37,7 @@ import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.TextStyle;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -77,7 +74,10 @@ public class UProductServiceImpl extends ServiceImpl<ProductMapper, Product> imp
@Override
@Cacheable(value = CacheConstant.USER_CLIENT_GROUPS_PRODUCT, key = "#shopId", unless = "#result.isEmpty()")
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);
productAllList.forEach(item -> {
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));
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);
Map<Long, List<Long>> relationKv = relationList.stream().collect(Collectors.groupingBy(ProdGroupRelationDTO::getProdGroupId, Collectors.mapping(ProdGroupRelationDTO::getProductId, Collectors.toList())));
List<ProdGroupRelationDTO> relationList = prodGroupIdList.isEmpty() ? new ArrayList<>() :
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) {
List<Long> productIdList = relationKv.get(group.getId());
if (CollUtil.isEmpty(productIdList)) {
@ -108,6 +111,14 @@ public class UProductServiceImpl extends ServiceImpl<ProductMapper, Product> imp
productList.parallelStream().forEach(product -> {
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);
}
return groupList.stream().filter(group -> CollUtil.isNotEmpty(group.getProductList())).toList();