Authored by hugufei

拼团接口优化

... ... @@ -29,13 +29,16 @@ public class CollageActivityIndexBaseService extends BaseService {
private static final Logger logger = LoggerFactory.getLogger(CollageActivityIndexBaseService.class);
//Collage index
public static final String COLLAGE_PARAM_ACTIVITYID = "activityId";//支持过滤
public static final String COLLAGE_PARAM_OPENLIMIT = "openLimit";//支持过滤
public static final String COLLAGE_PARAM_JOINLIMIT = "joinLimit";//支持过滤
public static final String COLLAGE_PARAM_ISAUTO = "isAuto";//支持过滤
public static final String COLLAGE_PARAM_PAYLIMIT = "payLimit";//支持过滤
public static final String COLLAGE_PARAM_PRODUCTLIMIT = "productLimit";//支持过滤
public static final String COLLAGE_PARAM_PEOPLENUMLIMIT = "peopleNum";//拼团人数-支持过滤
public static final String COLLAGE_PARAM_ACTIVITYID = "activityId";//拼团活动ID
public static final String COLLAGE_PARAM_OPENLIMIT = "openLimit";//开团限制:1、仅限新客;2、不限制
public static final String COLLAGE_PARAM_JOINLIMIT = "joinLimit";//参团限制:1、仅限新客;2、不限制
public static final String COLLAGE_PARAM_ISAUTO = "isAuto";//自动拼团:1、自动;2、不自动
public static final String COLLAGE_PARAM_PAYLIMIT = "payLimit";//支付限制:0或NULL 无限制 1:仅APP可支付 2:仅小程序可支付
public static final String COLLAGE_PARAM_PRODUCTLIMIT = "productLimit";//商品限制:0或null 无限制 1:参团SKN和开团一致
public static final String COLLAGE_PARAM_PEOPLENUMLIMIT = "peopleNum";//拼团人数
public static final String COLLAGE_PARAM_ONLY_SHOW_BEGIN = "onlyShowBegin";//是否只展示开始的
private static final List<String> collageActivityParamsList = Arrays.asList(
COLLAGE_PARAM_ACTIVITYID,
... ... @@ -46,7 +49,6 @@ public class CollageActivityIndexBaseService extends BaseService {
COLLAGE_PARAM_PRODUCTLIMIT,
COLLAGE_PARAM_PEOPLENUMLIMIT);
@Autowired
private SearchCommonService searchCommonService;
... ... @@ -63,11 +65,13 @@ public class CollageActivityIndexBaseService extends BaseService {
LoadingCache<String, Map<Integer, Map<String, Object>>> allValidActivitysCache = CacheBuilder.newBuilder()
.maximumSize(10).expireAfterWrite(1, TimeUnit.MINUTES).build(new CacheLoader<String, Map<Integer, Map<String, Object>>>() {
public Map<Integer, Map<String, Object>> load(String key) {
return queryValidActivitys(new HashMap<>());
//默认查询开始和即将开始的
Map<String, String> paramMap = new HashMap<>();
paramMap.put(COLLAGE_PARAM_ONLY_SHOW_BEGIN, "N");
return queryValidActivitys(paramMap);
}
});
public Map<Integer, Map<String, Object>> queryAllValidActivitys() {
try {
return allValidActivitysCache.get("AllValidActivitys");
... ... @@ -77,38 +81,62 @@ public class CollageActivityIndexBaseService extends BaseService {
}
/**
* 根据参数查询【正在生效或已经生效】的活动信息
* 生成时间过滤参数
*
* @param paramMap
* @return
*/
public Map<Integer, Map<String, Object>> queryValidActivitys(Map<String, String> paramMap) {
try {
SearchParam searchParam = new SearchParam();
BoolQueryBuilder boolFilter = QueryBuilders.boolQuery();
boolFilter.must(QueryBuilders.termQuery("status", 1));//过滤状态为1
long current = DateUtil.getCurrentTimeSecond();
private BoolQueryBuilder genBeginTimeFilter(Map<String, String> paramMap) {
long current = DateUtil.getCurrentTimeSecond();
//1、生成正在开始的过滤条件
BoolQueryBuilder hasBeginFilter = QueryBuilders.boolQuery();
hasBeginFilter.must(QueryBuilders.rangeQuery("beginTime").lte(current));//过滤活动开始时间
hasBeginFilter.must(QueryBuilders.rangeQuery("endTime").gte(current));//过滤活动结束时间
//2、执行参数判断
String onlyShowBegin = MapUtils.getString(paramMap, COLLAGE_PARAM_ONLY_SHOW_BEGIN, "N");
if ("Y".equalsIgnoreCase(onlyShowBegin)) {
return hasBeginFilter;
}
//已经开始的过滤条件
BoolQueryBuilder hasBeginFilter = QueryBuilders.boolQuery();
hasBeginFilter.must(QueryBuilders.rangeQuery("beginTime").lte(current));//过滤活动开始时间
hasBeginFilter.must(QueryBuilders.rangeQuery("endTime").gte(current));//过滤活动结束时间
//3、生成即将开始的过滤条件
BoolQueryBuilder notBeginFilter = QueryBuilders.boolQuery();
notBeginFilter.must(QueryBuilders.rangeQuery("beginTime").gte(current));//过滤活动开始时间
notBeginFilter.must(QueryBuilders.rangeQuery("endTime").gte(current));//过滤活动结束时间
//即将开始的过滤条件
BoolQueryBuilder notBeginFilter = QueryBuilders.boolQuery();
notBeginFilter.must(QueryBuilders.rangeQuery("beginTime").gte(current));//过滤活动开始时间
notBeginFilter.must(QueryBuilders.rangeQuery("endTime").gte(current));//过滤活动结束时间
return QueryBuilders.boolQuery().should(hasBeginFilter).should(notBeginFilter);
}
boolFilter.must(QueryBuilders.boolQuery().should(hasBeginFilter).should(notBeginFilter));
addTermQueryBatch(paramMap, boolFilter, collageActivityParamsList);
searchParam.setFiter(boolFilter);
/**
* 根据参数查询【正在生效或已经生效】的活动信息
*
* @param paramMap
* @return
*/
public Map<Integer, Map<String, Object>> queryValidActivitys(Map<String, String> paramMap) {
try {
SearchParam searchParam = new SearchParam();
//1、生成filter
BoolQueryBuilder filter = QueryBuilders.boolQuery();
searchParam.setFiter(filter);
//1.1、按参数过滤
addTermQueryBatch(paramMap, filter, collageActivityParamsList);
//1.2、默认状态为1
filter.must(QueryBuilders.termQuery("status", 1));//过滤状态为1
//1.3、生成时间参数
filter.must(this.genBeginTimeFilter(paramMap));
//2、设置分页-默认认为正在进行的拼团活动不超过100个
searchParam.setOffset(0);
searchParam.setSize(100);
//3、执行搜索
SearchResult searchResult = searchCommonService.doSearch(ISearchConstants.INDEX_NAME_COLLAGE_ACTIVITY, searchParam);
List<Map<String, Object>> collageActivitys = searchResult.getResultList();
//4、生成结果
Map<Integer, Map<String, Object>> result = new HashMap<>();
for (Map<String, Object> collageActivity : collageActivitys) {
Map<String, Object> bo = this.getCollageActivityInfo(collageActivity);
... ...