|
@@ -39,25 +39,20 @@ public class MktMgmtPushRecordServiceImpl implements MktMgmtPushRecordService {
|
|
public Page<MktMgmtPushRecord> pageQuery(MktMgmtPushRecordQueryDTO queryDTO) {
|
|
public Page<MktMgmtPushRecord> pageQuery(MktMgmtPushRecordQueryDTO queryDTO) {
|
|
log.info("分页查询营销推送记录,查询条件:{}", queryDTO);
|
|
log.info("分页查询营销推送记录,查询条件:{}", queryDTO);
|
|
|
|
|
|
- // 构建查询条件
|
|
|
|
LambdaQueryWrapper<MktMgmtPushRecord> queryWrapper = new LambdaQueryWrapper<>();
|
|
LambdaQueryWrapper<MktMgmtPushRecord> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
|
- // 规则名称模糊查询
|
|
|
|
if (StringUtils.hasText(queryDTO.getRuleName())) {
|
|
if (StringUtils.hasText(queryDTO.getRuleName())) {
|
|
queryWrapper.like(MktMgmtPushRecord::getRuleName, queryDTO.getRuleName());
|
|
queryWrapper.like(MktMgmtPushRecord::getRuleName, queryDTO.getRuleName());
|
|
}
|
|
}
|
|
|
|
|
|
- // 触发条件模糊查询
|
|
|
|
if (StringUtils.hasText(queryDTO.getTriggerCondition())) {
|
|
if (StringUtils.hasText(queryDTO.getTriggerCondition())) {
|
|
queryWrapper.like(MktMgmtPushRecord::getTriggerCondition, queryDTO.getTriggerCondition());
|
|
queryWrapper.like(MktMgmtPushRecord::getTriggerCondition, queryDTO.getTriggerCondition());
|
|
}
|
|
}
|
|
|
|
|
|
queryWrapper.eq(MktMgmtPushRecord::getDelFlag, "0");
|
|
queryWrapper.eq(MktMgmtPushRecord::getDelFlag, "0");
|
|
|
|
|
|
- // 按创建时间倒序排列
|
|
|
|
queryWrapper.orderByDesc(MktMgmtPushRecord::getCreateTime);
|
|
queryWrapper.orderByDesc(MktMgmtPushRecord::getCreateTime);
|
|
|
|
|
|
- // 执行分页查询
|
|
|
|
Page<MktMgmtPushRecord> page = new Page<>(queryDTO.getPageNum(), queryDTO.getPageSize());
|
|
Page<MktMgmtPushRecord> page = new Page<>(queryDTO.getPageNum(), queryDTO.getPageSize());
|
|
Page<MktMgmtPushRecord> result = mktMgmtPushRecordMapper.selectPage(page, queryWrapper);
|
|
Page<MktMgmtPushRecord> result = mktMgmtPushRecordMapper.selectPage(page, queryWrapper);
|
|
|
|
|
|
@@ -70,21 +65,18 @@ public class MktMgmtPushRecordServiceImpl implements MktMgmtPushRecordService {
|
|
log.info("新增营销推送记录,数据:{}", saveDTO);
|
|
log.info("新增营销推送记录,数据:{}", saveDTO);
|
|
|
|
|
|
try {
|
|
try {
|
|
- // 1. 根据推送内容匹配关键字,计算每条规则的关键字匹配次数
|
|
|
|
Map<Long, Integer> ruleMatchCounts = calculateRuleMatchCounts(saveDTO.getPushContent());
|
|
Map<Long, Integer> ruleMatchCounts = calculateRuleMatchCounts(saveDTO.getPushContent());
|
|
if (ruleMatchCounts.isEmpty()) {
|
|
if (ruleMatchCounts.isEmpty()) {
|
|
log.warn("推送内容未匹配到任何关键字:{}", saveDTO.getPushContent());
|
|
log.warn("推送内容未匹配到任何关键字:{}", saveDTO.getPushContent());
|
|
return "推送内容【" + saveDTO.getPushContent() + "】未匹配到任何关键字";
|
|
return "推送内容【" + saveDTO.getPushContent() + "】未匹配到任何关键字";
|
|
}
|
|
}
|
|
|
|
|
|
- // 2. 按匹配次数从高到低排序规则
|
|
|
|
List<Map.Entry<Long, Integer>> sortedRules = ruleMatchCounts.entrySet().stream()
|
|
List<Map.Entry<Long, Integer>> sortedRules = ruleMatchCounts.entrySet().stream()
|
|
.sorted(Map.Entry.<Long, Integer>comparingByValue().reversed())
|
|
.sorted(Map.Entry.<Long, Integer>comparingByValue().reversed())
|
|
.collect(Collectors.toList());
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
log.debug("按匹配次数排序的规则:{}", sortedRules);
|
|
log.debug("按匹配次数排序的规则:{}", sortedRules);
|
|
|
|
|
|
- // 3. 依次尝试每个规则,记录详细的尝试信息
|
|
|
|
StringBuilder errorDetails = new StringBuilder();
|
|
StringBuilder errorDetails = new StringBuilder();
|
|
MktMgmtRule selectedRule = null;
|
|
MktMgmtRule selectedRule = null;
|
|
Long selectedRuleId = null;
|
|
Long selectedRuleId = null;
|
|
@@ -95,7 +87,6 @@ public class MktMgmtPushRecordServiceImpl implements MktMgmtPushRecordService {
|
|
|
|
|
|
log.debug("尝试规则{},匹配次数:{}", ruleId, matchCount);
|
|
log.debug("尝试规则{},匹配次数:{}", ruleId, matchCount);
|
|
|
|
|
|
- // 获取规则信息
|
|
|
|
MktMgmtRule rule = mktMgmtRuleMapper.selectById(ruleId);
|
|
MktMgmtRule rule = mktMgmtRuleMapper.selectById(ruleId);
|
|
if (rule == null || "1".equals(rule.getDelFlag())) {
|
|
if (rule == null || "1".equals(rule.getDelFlag())) {
|
|
log.warn("规则不存在或已删除,ruleId:{}", ruleId);
|
|
log.warn("规则不存在或已删除,ruleId:{}", ruleId);
|
|
@@ -103,7 +94,6 @@ public class MktMgmtPushRecordServiceImpl implements MktMgmtPushRecordService {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
- // 获取匹配的关键字
|
|
|
|
List<String> matchedKeywords = getMatchedKeywordsForRule(saveDTO.getPushContent(), ruleId);
|
|
List<String> matchedKeywords = getMatchedKeywordsForRule(saveDTO.getPushContent(), ruleId);
|
|
|
|
|
|
// 验证IP和域名规则
|
|
// 验证IP和域名规则
|
|
@@ -129,16 +119,12 @@ public class MktMgmtPushRecordServiceImpl implements MktMgmtPushRecordService {
|
|
return errorMessage;
|
|
return errorMessage;
|
|
}
|
|
}
|
|
|
|
|
|
- // 5. 获取匹配的关键字信息
|
|
|
|
List<String> matchedKeywords = getMatchedKeywordsForRule(saveDTO.getPushContent(), selectedRuleId);
|
|
List<String> matchedKeywords = getMatchedKeywordsForRule(saveDTO.getPushContent(), selectedRuleId);
|
|
|
|
|
|
- // 6. 构建触发条件描述
|
|
|
|
String triggerCondition = buildTriggerCondition(matchedKeywords, selectedRule, saveDTO.getPushIP(), saveDTO.getPushDomain());
|
|
String triggerCondition = buildTriggerCondition(matchedKeywords, selectedRule, saveDTO.getPushIP(), saveDTO.getPushDomain());
|
|
|
|
|
|
- // 7. 创建推送记录
|
|
|
|
MktMgmtPushRecord record = getMktMgmtPushRecord(saveDTO, triggerCondition, selectedRule);
|
|
MktMgmtPushRecord record = getMktMgmtPushRecord(saveDTO, triggerCondition, selectedRule);
|
|
|
|
|
|
- // 8. 保存到数据库
|
|
|
|
int result = mktMgmtPushRecordMapper.insert(record);
|
|
int result = mktMgmtPushRecordMapper.insert(record);
|
|
if (result > 0) {
|
|
if (result > 0) {
|
|
log.info("营销推送记录新增成功,ID:{},规则:{},匹配关键字:{}", record.getId(), selectedRule.getRuleName(), matchedKeywords);
|
|
log.info("营销推送记录新增成功,ID:{},规则:{},匹配关键字:{}", record.getId(), selectedRule.getRuleName(), matchedKeywords);
|
|
@@ -156,20 +142,24 @@ public class MktMgmtPushRecordServiceImpl implements MktMgmtPushRecordService {
|
|
|
|
|
|
@NotNull
|
|
@NotNull
|
|
private static MktMgmtPushRecord getMktMgmtPushRecord(MktMgmtPushRecordSaveDTO saveDTO, String triggerCondition, MktMgmtRule selectedRule) {
|
|
private static MktMgmtPushRecord getMktMgmtPushRecord(MktMgmtPushRecordSaveDTO saveDTO, String triggerCondition, MktMgmtRule selectedRule) {
|
|
- String pushDetailBuilder = "\"触发条件:\" + " +
|
|
|
|
- triggerCondition +
|
|
|
|
- "+ \",推送内容:\" + " +
|
|
|
|
- saveDTO.getPushContent();
|
|
|
|
|
|
+ // 构建推送详情的JSON格式
|
|
|
|
+ String pushDetailJson = "{" +
|
|
|
|
+ "\"triggerCondition\":" + triggerCondition +
|
|
|
|
+ ",\"pushContent\":\"" + saveDTO.getPushContent() + "\"" +
|
|
|
|
+ ",\"ruleName\":\"" + selectedRule.getRuleName() + "\"" +
|
|
|
|
+ ",\"pushFrequency\":" + selectedRule.getPushFrequency() +
|
|
|
|
+ "}";
|
|
|
|
|
|
- // 8. 创建推送记录
|
|
|
|
MktMgmtPushRecord record = new MktMgmtPushRecord();
|
|
MktMgmtPushRecord record = new MktMgmtPushRecord();
|
|
record.setPushContent(saveDTO.getPushContent());
|
|
record.setPushContent(saveDTO.getPushContent());
|
|
record.setRuleName(selectedRule.getRuleName());
|
|
record.setRuleName(selectedRule.getRuleName());
|
|
record.setPushFrequency(selectedRule.getPushFrequency());
|
|
record.setPushFrequency(selectedRule.getPushFrequency());
|
|
record.setPushStatus(true); // 总为1-成功
|
|
record.setPushStatus(true); // 总为1-成功
|
|
record.setTriggerCondition(triggerCondition);
|
|
record.setTriggerCondition(triggerCondition);
|
|
- record.setPushDetail(pushDetailBuilder);
|
|
|
|
- record.setDelFlag("0"); // 未删除
|
|
|
|
|
|
+ record.setPushDetail(pushDetailJson);
|
|
|
|
+ record.setPushAction(selectedRule.getAction());
|
|
|
|
+ record.setPushType(selectedRule.getPushType());
|
|
|
|
+ record.setDelFlag("0");
|
|
return record;
|
|
return record;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -258,24 +248,26 @@ public class MktMgmtPushRecordServiceImpl implements MktMgmtPushRecordService {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- /**
|
|
|
|
- * 构建触发条件描述(支持多个关键字)
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 构建触发条件描述(JSON格式)
|
|
*/
|
|
*/
|
|
private String buildTriggerCondition(List<String> keywords, MktMgmtRule rule, String pushIP, String pushDomain) {
|
|
private String buildTriggerCondition(List<String> keywords, MktMgmtRule rule, String pushIP, String pushDomain) {
|
|
- StringBuilder triggerCondition = new StringBuilder();
|
|
|
|
- triggerCondition.append("关键字:").append(String.join(",", keywords));
|
|
|
|
|
|
+ StringBuilder json = new StringBuilder();
|
|
|
|
+ json.append("{");
|
|
|
|
+ json.append("\"keywords\":[").append(keywords.stream().map(k -> "\"" + k + "\"").collect(Collectors.joining(","))).append("]");
|
|
|
|
|
|
// 添加IP信息
|
|
// 添加IP信息
|
|
if (StringUtils.hasText(pushIP)) {
|
|
if (StringUtils.hasText(pushIP)) {
|
|
- triggerCondition.append(",IP:").append(pushIP);
|
|
|
|
|
|
+ json.append(",\"ip\":\"").append(pushIP).append("\"");
|
|
}
|
|
}
|
|
|
|
|
|
// 添加域名信息
|
|
// 添加域名信息
|
|
if (StringUtils.hasText(pushDomain)) {
|
|
if (StringUtils.hasText(pushDomain)) {
|
|
- triggerCondition.append(",域名:").append(pushDomain);
|
|
|
|
|
|
+ json.append(",\"domain\":\"").append(pushDomain).append("\"");
|
|
}
|
|
}
|
|
|
|
|
|
- return triggerCondition.toString();
|
|
|
|
|
|
+ json.append("}");
|
|
|
|
+ return json.toString();
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|