解决商品多规格中文排序问题

This commit is contained in:
hupeng committed 2025-08-20 11:14:49 +08:00
1 parent 91763cfe3c
commit 4d9b2cd377
2 files changed
+22 -5

No files matched your search

@@ -3,11 +3,10 @@ package co.yixiang.yshop.framework.common.util.string;
import cn.hutool.core.text.StrPool; import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import org.springframework.util.CollectionUtils;
import java.util.Arrays; import java.text.Collator;
import java.util.Collection; import java.util.*;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -77,4 +76,21 @@ public class StrUtils {
.collect(Collectors.joining("\n")); .collect(Collectors.joining("\n"));
} }
/**
* 数字排在最前,英文字母其次,汉字则按照拼音进行排序
*/
public static List<String> compareTo(List<String> stringList) {
if (CollectionUtils.isEmpty(stringList)) {
return Collections.emptyList();
}
Comparator<String> comparator = (text, texts) -> {
Collator collator = Collator.getInstance(java.util.Locale.CHINESE);
return collator.getCollationKey(text).compareTo(
collator.getCollationKey(texts));
};
Collections.sort(stringList, comparator);
return stringList;
}
} }
@@ -3,6 +3,7 @@ package co.yixiang.yshop.module.product.service.storeproductattr;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import co.yixiang.yshop.framework.common.util.string.StrUtils;
import co.yixiang.yshop.module.product.dal.dataobject.storeproductattr.StoreProductAttrDO; import co.yixiang.yshop.module.product.dal.dataobject.storeproductattr.StoreProductAttrDO;
import co.yixiang.yshop.module.product.dal.dataobject.storeproductattrvalue.StoreProductAttrValueDO; import co.yixiang.yshop.module.product.dal.dataobject.storeproductattrvalue.StoreProductAttrValueDO;
import co.yixiang.yshop.module.product.dal.mysql.storeproductattr.StoreProductAttrMapper; import co.yixiang.yshop.module.product.dal.mysql.storeproductattr.StoreProductAttrMapper;
@@ -103,7 +104,7 @@ public class StoreProductAttrServiceImpl extends ServiceImpl<StoreProductAttrMap
// throw new BadRequestException("活动商品库存不能大于原有商品库存"); // throw new BadRequestException("活动商品库存不能大于原有商品库存");
// } // }
List<String> stringList = new ArrayList<>(productFormatDto.getDetail().values()); List<String> stringList = new ArrayList<>(productFormatDto.getDetail().values());
Collections.sort(stringList); stringList = StrUtils.compareTo(stringList);
StoreProductAttrValueDO oldAttrValue = storeProductAttrValueService.getOne(new LambdaQueryWrapper<StoreProductAttrValueDO>() StoreProductAttrValueDO oldAttrValue = storeProductAttrValueService.getOne(new LambdaQueryWrapper<StoreProductAttrValueDO>()
.eq(StoreProductAttrValueDO::getSku, productFormatDto.getSku()) .eq(StoreProductAttrValueDO::getSku, productFormatDto.getSku())
.eq(StoreProductAttrValueDO::getProductId, productId)); .eq(StoreProductAttrValueDO::getProductId, productId));