频次过滤修改

master
luohaojie 3 years ago
parent 25966c9301
commit f2973035bb

@ -1,5 +1,6 @@
package com.java3y.austin.domain; package com.java3y.austin.domain;
import com.alibaba.fastjson.annotation.JSONField;
import com.java3y.austin.enums.AnchorState; import com.java3y.austin.enums.AnchorState;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -12,7 +13,6 @@ import lombok.Data;
@Builder @Builder
@Data @Data
public class DeduplicationParam { public class DeduplicationParam {
/** /**
* TaskIno * TaskIno
*/ */
@ -22,16 +22,17 @@ public class DeduplicationParam {
* *
* *
*/ */
@JSONField(name = "time")
private Long deduplicationTime; private Long deduplicationTime;
/** /**
* *
*/ */
@JSONField(name = "num")
private Integer countNum; private Integer countNum;
/** /**
* *
*/ */
private AnchorState anchorState; private AnchorState anchorState;
} }

@ -19,7 +19,7 @@ import java.util.*;
* *
*/ */
@Slf4j @Slf4j
public abstract class AbstractDeduplicationService { public abstract class AbstractDeduplicationService implements DeduplicationService {
@Autowired @Autowired
private RedisUtils redisUtils; private RedisUtils redisUtils;

@ -0,0 +1,15 @@
package com.java3y.austin.service.deduplication;
/**
* @author huskey
* @date 2022/1/18
*/
public class DeduplicationConstants {
/**
* {"contentDeduplication":{"num":1,"time":300},"frequencyDeduplication":{"num":5}}
*/
public static final String DEDUPLICATION_RULE_KEY = "deduplication";
public static final String CONTENT_DEDUPLICATION = "contentDeduplication";
public static final String FREQUENCY_DEDUPLICATION = "frequencyDeduplication";
}

@ -1,18 +1,17 @@
package com.java3y.austin.service.deduplication; package com.java3y.austin.service.deduplication;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ctrip.framework.apollo.Config; import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfig; import com.ctrip.framework.apollo.spring.annotation.ApolloConfig;
import com.google.common.collect.Lists;
import com.java3y.austin.constant.AustinConstant; import com.java3y.austin.constant.AustinConstant;
import com.java3y.austin.domain.DeduplicationParam; import com.java3y.austin.domain.DeduplicationParam;
import com.java3y.austin.domain.TaskInfo; import com.java3y.austin.domain.TaskInfo;
import com.java3y.austin.enums.AnchorState; import com.java3y.austin.service.deduplication.build.BuilderFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date; import java.util.List;
/** /**
* @author 3y. * @author 3y.
@ -22,47 +21,39 @@ import java.util.Date;
@Service @Service
public class DeduplicationRuleService { public class DeduplicationRuleService {
/**
* {"contentDeduplication":{"num":1,"time":300},"frequencyDeduplication":{"num":5}}
*/
private static final String DEDUPLICATION_RULE_KEY = "deduplication";
private static final String CONTENT_DEDUPLICATION = "contentDeduplication";
private static final String FREQUENCY_DEDUPLICATION = "frequencyDeduplication";
private static final String TIME = "time";
private static final String NUM = "num";
@Autowired private static final String SERVICE = "Service";
private ContentDeduplicationService contentDeduplicationService; @ApolloConfig("boss.austin")
private Config config;
@Autowired @Autowired
private FrequencyDeduplicationService frequencyDeduplicationService; private ApplicationContext applicationContext;
@Autowired
private BuilderFactory builderFactory;
@ApolloConfig("boss.austin") //需要去重的服务
private Config config; private static final List<String> DEDUPLICATION_LIST = Lists.newArrayList(DeduplicationConstants.CONTENT_DEDUPLICATION, DeduplicationConstants.FREQUENCY_DEDUPLICATION);
public void duplication(TaskInfo taskInfo) { public void duplication(TaskInfo taskInfo) {
// 配置示例:{"contentDeduplication":{"num":1,"time":300},"frequencyDeduplication":{"num":5}} // 配置样例:{"contentDeduplication":{"num":1,"time":300},"frequencyDeduplication":{"num":5}}
JSONObject property = JSON.parseObject(config.getProperty(DEDUPLICATION_RULE_KEY, AustinConstant.APOLLO_DEFAULT_VALUE_JSON_OBJECT)); String deduplication = config.getProperty(DeduplicationConstants.DEDUPLICATION_RULE_KEY, AustinConstant.APOLLO_DEFAULT_VALUE_JSON_OBJECT);
JSONObject contentDeduplication = property.getJSONObject(CONTENT_DEDUPLICATION); //去重
JSONObject frequencyDeduplication = property.getJSONObject(FREQUENCY_DEDUPLICATION); DEDUPLICATION_LIST.forEach(
key -> {
DeduplicationParam deduplicationParam = builderFactory.select(key).build(deduplication, key);
if (deduplicationParam != null) {
deduplicationParam.setTaskInfo(taskInfo);
DeduplicationService deduplicationService = findService(key + SERVICE);
deduplicationService.deduplication(deduplicationParam);
}
}
);
// 文案去重 }
DeduplicationParam contentParams = DeduplicationParam.builder()
.deduplicationTime(contentDeduplication.getLong(TIME))
.countNum(contentDeduplication.getInteger(NUM)).taskInfo(taskInfo)
.anchorState(AnchorState.CONTENT_DEDUPLICATION)
.build();
contentDeduplicationService.deduplication(contentParams);
private DeduplicationService findService(String beanName) {
return applicationContext.getBean(beanName, DeduplicationService.class);
// 运营总规则去重(一天内用户收到最多同一个渠道的消息次数)
Long seconds = (DateUtil.endOfDay(new Date()).getTime() - DateUtil.current()) / 1000;
DeduplicationParam businessParams = DeduplicationParam.builder()
.deduplicationTime(seconds)
.countNum(frequencyDeduplication.getInteger(NUM)).taskInfo(taskInfo)
.anchorState(AnchorState.RULE_DEDUPLICATION)
.build();
frequencyDeduplicationService.deduplication(businessParams);
} }
} }

@ -0,0 +1,12 @@
package com.java3y.austin.service.deduplication;
import com.java3y.austin.domain.DeduplicationParam;
/**
* @author huskey
* @date 2022/1/18
*/
public interface DeduplicationService {
void deduplication(DeduplicationParam param);
}

@ -0,0 +1,12 @@
package com.java3y.austin.service.deduplication.build;
import com.java3y.austin.domain.DeduplicationParam;
/**
* @author luohaojie
* @date 2022/1/18
*/
public interface Builder {
DeduplicationParam build(String deduplication, String key);
}

@ -0,0 +1,40 @@
package com.java3y.austin.service.deduplication.build;
import com.java3y.austin.service.deduplication.DeduplicationConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
/**
* @author huskey
* @date 2022/1/18
*/
@Service
public class BuilderFactory {
private Map<String, Builder> builderFactory = new HashMap<>(4);
@Autowired
private Builder contentDeduplicationBuilder;
@Autowired
private Builder frequencyDeduplicationBuilder;
@PostConstruct
public void init() {
builderFactory.put(DeduplicationConstants.CONTENT_DEDUPLICATION, contentDeduplicationBuilder);
builderFactory.put(DeduplicationConstants.FREQUENCY_DEDUPLICATION, frequencyDeduplicationBuilder);
}
public Builder select(String key) {
return builderFactory.get(key);
}
}

@ -0,0 +1,31 @@
package com.java3y.austin.service.deduplication.build;
import com.alibaba.fastjson.JSONObject;
import com.java3y.austin.domain.DeduplicationParam;
import com.java3y.austin.enums.AnchorState;
import com.java3y.austin.service.deduplication.build.Builder;
import org.springframework.stereotype.Service;
/**
* @author huskey
* @date 2022/1/18
*/
@Service
public class ContentDeduplicationBuilder implements Builder {
public DeduplicationParam build(String deduplication, String key) {
JSONObject object = JSONObject.parseObject(deduplication);
if (object == null) {
return null;
}
DeduplicationParam deduplicationParam = JSONObject.parseObject(object.getString(key), DeduplicationParam.class);
if (deduplicationParam == null) {
return null;
}
deduplicationParam.setAnchorState(AnchorState.RULE_DEDUPLICATION);
return deduplicationParam;
}
}

@ -0,0 +1,34 @@
package com.java3y.austin.service.deduplication.build;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.java3y.austin.domain.DeduplicationParam;
import com.java3y.austin.enums.AnchorState;
import com.java3y.austin.service.deduplication.build.Builder;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
* @author huskey
* @date 2022/1/18
*/
@Service
public class FrequencyDeduplicationBuilder implements Builder {
@Override
public DeduplicationParam build(String deduplication, String key) {
JSONObject object = JSONObject.parseObject(deduplication);
if (object == null) {
return null;
}
DeduplicationParam deduplicationParam = JSONObject.parseObject(object.getString(key), DeduplicationParam.class);
if (deduplicationParam == null) {
return null;
}
deduplicationParam.setDeduplicationTime((DateUtil.endOfDay(new Date()).getTime() - DateUtil.current()) / 1000);
deduplicationParam.setAnchorState(AnchorState.RULE_DEDUPLICATION);
return deduplicationParam;
}
}
Loading…
Cancel
Save