package com.oying.modules.pc.store.domain.dto; import com.oying.utils.StringUtils; import lombok.Data; import io.swagger.annotations.ApiModelProperty; import org.springframework.util.DigestUtils; import java.io.Serializable; import java.util.StringJoiner; /** * @author lzp * @date 2025-04-22 **/ @Data public class StoreQueryCriteria implements Serializable { @ApiModelProperty(value = "商户ID", example = "1") private Long merchantId; private String storeName; private Integer status; private Long storeId; private Long platformCategoryId; private String blurry; private Double longitude; // 中心点经度 private Double latitude; // 中心点纬度 private Integer radius = 10000; // 搜索半径(米) private Integer limit = 20; // 返回数量限制 @ApiModelProperty(value = "页码", example = "1") private Integer page = 1; @ApiModelProperty(value = "每页数据量", example = "10") private Integer size = 10; public String buildConditionCacheKey() { StringJoiner baseKeyJoiner = new StringJoiner("|"); if (platformCategoryId != null) { baseKeyJoiner.add("platformCategoryId=" + platformCategoryId); } if (StringUtils.isNotEmpty(blurry)) { baseKeyJoiner.add("blurry=" + blurry); } if (longitude != null && latitude != null) { baseKeyJoiner.add("longitude=" + longitude); baseKeyJoiner.add("latitude=" + latitude); } if (StringUtils.isNotEmpty(blurry)) { baseKeyJoiner.add("radius=" + radius); } // 使用MD5或SHA缩短键长度 return "store:search:page:" + DigestUtils.md5DigestAsHex(baseKeyJoiner.toString().getBytes()); } }