|
@@ -2,14 +2,15 @@ package cn.com.ctop.alarm.modules.service.impl;
|
|
|
|
|
|
import cn.com.ctop.alarm.modules.entity.AlarmEventMetric;
|
|
|
import cn.com.ctop.alarm.modules.entity.AlarmEventRule;
|
|
|
-import cn.com.ctop.alarm.modules.entity.AlarmEventSend;
|
|
|
+import cn.com.ctop.alarm.modules.entity.AlarmRuleCampaignRel;
|
|
|
import cn.com.ctop.alarm.modules.mapper.AlarmEventMetricMapper;
|
|
|
import cn.com.ctop.alarm.modules.mapper.AlarmEventRuleMapper;
|
|
|
-import cn.com.ctop.alarm.modules.mapper.AlarmEventSendMapper;
|
|
|
+import cn.com.ctop.alarm.modules.mapper.AlarmRuleCampaignRelMapper;
|
|
|
import cn.com.ctop.alarm.modules.service.IAlarmEventRuleService;
|
|
|
-import cn.com.ctop.common.module.service.IMessageTemplate;
|
|
|
-import cn.com.ctop.common.module.service.ISendMessageService;
|
|
|
import cn.com.ctop.common.module.utils.Check;
|
|
|
+import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouGroup;
|
|
|
+import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouCampaignMapper;
|
|
|
+import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouGroupMapper;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
@@ -17,15 +18,15 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.github.pagehelper.PageInfo;
|
|
|
import com.xxl.job.core.enums.NoEn;
|
|
|
import org.apache.shiro.SecurityUtils;
|
|
|
+import org.jeecg.common.api.vo.Result;
|
|
|
import org.jeecg.common.system.vo.LoginUser;
|
|
|
-import org.jeecg.common.util.db.DataSourceCachePool;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.data.redis.core.HashOperations;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.transaction.Transactional;
|
|
|
-import java.math.BigDecimal;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
* 预警事件规则表
|
|
@@ -47,13 +48,13 @@ public class AlarmEventRuleServiceImpl extends ServiceImpl<AlarmEventRuleMapper,
|
|
|
private AlarmEventMetricMapper alarmEventMetricMapper;
|
|
|
|
|
|
@Autowired
|
|
|
- private AlarmEventSendMapper alarmEventSendMapper;
|
|
|
+ private AlarmRuleCampaignRelMapper alarmRuleCampaignRelMapper;
|
|
|
|
|
|
@Autowired
|
|
|
- private IMessageTemplate messageTemplate;
|
|
|
+ private KuaiShouCampaignMapper kuaiShouCampaignMapper;
|
|
|
|
|
|
@Autowired
|
|
|
- private ISendMessageService sendMessageService;
|
|
|
+ private KuaiShouGroupMapper kuaiShouGroupMapper;
|
|
|
|
|
|
@Override
|
|
|
public PageInfo<AlarmEventRule> selectListPage(AlarmEventRule alarmEventRule) {
|
|
@@ -61,9 +62,10 @@ public class AlarmEventRuleServiceImpl extends ServiceImpl<AlarmEventRuleMapper,
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void deleteById(String id) {
|
|
|
+ public void deleteById(Long id) {
|
|
|
alarmEventRuleMapper.deleteById(id);
|
|
|
alarmEventMetricMapper.deleteByRuleId(id);
|
|
|
+ alarmRuleCampaignRelMapper.deleteByRuleId(id);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -72,51 +74,164 @@ public class AlarmEventRuleServiceImpl extends ServiceImpl<AlarmEventRuleMapper,
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void addAlarmEventRule(JSONObject obj) {
|
|
|
- AlarmEventRule rule = new AlarmEventRule();
|
|
|
- rule.setAccountId(obj.getLong("accountId"));
|
|
|
- rule.setUnitId(obj.getLong("unitId"));
|
|
|
- rule.setEventRuleName(obj.getString("eventRuleName"));
|
|
|
- rule.setEventRuleLevel(obj.getString("eventRuleLevel"));
|
|
|
- rule.setCheckFrequency(obj.getString("checkFrequency"));
|
|
|
- rule.setProcessMethod(obj.getString("processMethod"));
|
|
|
- rule.setEventRuleStatus(NoEn.NO1.valueStr());
|
|
|
- rule.setMetricValueCode(obj.getString("metricValueCode"));
|
|
|
- rule.setMetricValueName(obj.getString("metricValueName"));
|
|
|
- rule.setCreaterId(obj.getString("createrId"));
|
|
|
+ public Result<Object> addAlarmEventRule(JSONObject obj) {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("account_id", obj.getLong("accountId"));
|
|
|
+ map.put("event_rule_name", obj.getString("eventRuleName"));
|
|
|
+ if (!Check.isNull(alarmEventRuleMapper.selectByMap(map))) {
|
|
|
+ return Result.error(1, "添加失败,重复的规则名,请重新输入");
|
|
|
+ }
|
|
|
|
|
|
- LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
|
|
- if (!Check.isNull(sysUser)) {
|
|
|
- rule.setCreaterId(sysUser.getId());
|
|
|
+ //1。新增rule表
|
|
|
+ AlarmEventRule rule = new AlarmEventRule();
|
|
|
+ reSetRuleEntity(rule, obj);
|
|
|
+ JSONArray metrics = obj.getJSONArray("alarmEventMetric");
|
|
|
+ if (Check.isNull(metrics)) {
|
|
|
+ return Result.error(1, "请选择具体规则指标");
|
|
|
}
|
|
|
+ rule.setEventRuleStatus(NoEn.NO1.valueStr());//默认新增为激活状态
|
|
|
alarmEventRuleMapper.insert(rule);
|
|
|
- JSONArray metrics = obj.getJSONArray("alarmEventMetric");
|
|
|
+ //2。新增metric表
|
|
|
+ AlarmEventMetric metric = null;
|
|
|
for (int i = 0; i < metrics.size(); i++) {
|
|
|
- JSONObject mo = metrics.getJSONObject(i);
|
|
|
- AlarmEventMetric metric = new AlarmEventMetric();
|
|
|
- metric.setEventRuleId(rule.getEventRuleId());
|
|
|
- metric.setMetricValueCode(mo.getString("metricValueCode"));
|
|
|
- metric.setJudgeType(mo.getString("judgeType"));
|
|
|
- metric.setJudgeMethod(mo.getString("judgeMethod"));
|
|
|
- metric.setThreshold(mo.getString("threshold"));
|
|
|
- metric.setMinThreshold(mo.getString("minThreshold"));
|
|
|
- metric.setDataRange(mo.getString("dataRange"));
|
|
|
- metric.setMetricValueCode(mo.getString("metricValueCode"));
|
|
|
- metric.setMetricValueName(mo.getString("metricValueName"));
|
|
|
+ metric = new AlarmEventMetric();
|
|
|
+ reSetMetricEntity(metric, metrics.getJSONObject(i), rule.getEventRuleId());
|
|
|
alarmEventMetricMapper.insert(metric);
|
|
|
}
|
|
|
+ //2。新增rel表
|
|
|
+ //通过指定选择应用
|
|
|
+ JSONArray rels = obj.getJSONArray("rel");
|
|
|
+ if (!Check.isNull(rels)) {
|
|
|
+ addRelByIds(rels, rule);
|
|
|
+ }
|
|
|
+ return new Result<>().success("添加成功!");
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void editAlarmEventRule(JSONObject obj) {
|
|
|
+ public Result<Object> editAlarmEventRule(JSONObject obj) {
|
|
|
+ AlarmEventRule alarmEventRule = new AlarmEventRule();
|
|
|
+ alarmEventRule.setUnitId(obj.getLong("eventRuleId"));
|
|
|
+ alarmEventRule.setAccountId(obj.getLong("accountId"));
|
|
|
+ alarmEventRule.setEventRuleName(obj.getString("eventRuleName"));
|
|
|
+ if (!Check.isNull(alarmEventRuleMapper.selectListPage(alarmEventRule))) {
|
|
|
+ return Result.error(1, "修改失败,重复的规则名,请重新输入");
|
|
|
+ }
|
|
|
+ //1.更改rule表
|
|
|
AlarmEventRule rule = new AlarmEventRule();
|
|
|
+ reSetRuleEntity(rule, obj);
|
|
|
+ QueryWrapper<AlarmEventRule> ruleWrapper = new QueryWrapper<>();
|
|
|
+ ruleWrapper.eq("event_rule_id", obj.getLong("eventRuleId"));
|
|
|
+ alarmEventRuleMapper.update(rule, ruleWrapper);
|
|
|
+ rule.setEventRuleId(obj.getLong("eventRuleId"));
|
|
|
+ //2.更改metric表
|
|
|
+ JSONArray metrics = obj.getJSONArray("alarmEventMetric");
|
|
|
+ if (Check.isNull(metrics)) {
|
|
|
+ return Result.error(1, "请选择具体规则指标");
|
|
|
+ }
|
|
|
+ AlarmEventMetric metric = null;
|
|
|
+ QueryWrapper<AlarmEventMetric> metricWrapper = null;
|
|
|
+ for (int i = 0; i < metrics.size(); i++) {
|
|
|
+ JSONObject mo = metrics.getJSONObject(i);
|
|
|
+ metric = new AlarmEventMetric();
|
|
|
+ reSetMetricEntity(metric, mo, rule.getEventRuleId());
|
|
|
+ metricWrapper = new QueryWrapper<>();
|
|
|
+ metricWrapper.eq("event_metric_id", mo.getLong("eventMetricId"));
|
|
|
+ metricWrapper.eq("event_rule_id", obj.getLong("eventRuleId"));
|
|
|
+ alarmEventMetricMapper.update(metric, metricWrapper);
|
|
|
+ }
|
|
|
+ //3.更改rel表
|
|
|
+ //通过指定,传参ids绑定应用
|
|
|
+ JSONArray rels = obj.getJSONArray("rel");
|
|
|
+ if (!Check.isNull(rels)) {
|
|
|
+ alarmRuleCampaignRelMapper.deleteByRuleId(rule.getEventRuleId());
|
|
|
+ addRelByIds(rels, rule);
|
|
|
+ }
|
|
|
+ return new Result<>().success("修改成功!");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AlarmEventRule selectById(Long id) {
|
|
|
+ AlarmEventRule alarmEventRule = alarmEventRuleMapper.queryById(id);
|
|
|
+ if (Check.isNull(alarmEventRule)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ alarmEventRule.setAlarmEventMetrics(alarmEventMetricMapper.selectByEventRuleId(id));
|
|
|
+ if (("CAMPAIGN".equals(alarmEventRule.getEventRuleLevel()) || "UNIT".equals(alarmEventRule.getEventRuleLevel())) && !NoEn.NO1.valueStr().equals(alarmEventRule.getAppStatus())) {
|
|
|
+ alarmEventRule.setRel(alarmRuleCampaignRelMapper.selectByRuleId(id));
|
|
|
+ }
|
|
|
+ return alarmEventRule;
|
|
|
+ }
|
|
|
+
|
|
|
+ //通过状态+level绑定应用
|
|
|
+ private void addRelByStatus(AlarmEventRule rule, Long campaignId) {
|
|
|
+ if ("CAMPAIGN".equals(rule.getEventRuleLevel())) {
|
|
|
+ List<Long> ids = kuaiShouCampaignMapper.queryIdsByPutStatus(rule.getAccountId(), NoEn.NO1.valueStr());
|
|
|
+ if (Check.isNull(ids)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (Long id : ids) {
|
|
|
+ AlarmRuleCampaignRel relEntity = new AlarmRuleCampaignRel();
|
|
|
+ relEntity.setEventRuleId(rule.getEventRuleId());
|
|
|
+ relEntity.setAccountId(rule.getAccountId());
|
|
|
+ relEntity.setEventRuleLevel(rule.getEventRuleLevel());
|
|
|
+ relEntity.setCampaignId(id);
|
|
|
+ alarmRuleCampaignRelMapper.insert(relEntity);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ("UNIT".equals(rule.getEventRuleLevel())) {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("put_status", NoEn.NO1.valueStr());
|
|
|
+ map.put("account_id", rule.getAccountId());
|
|
|
+ if (Check.isNull(campaignId)) {
|
|
|
+ map.put("campaign_id", campaignId);
|
|
|
+ }
|
|
|
+ List<KuaiShouGroup> kuaiShouGroups = kuaiShouGroupMapper.selectByMap(map);
|
|
|
+ if (Check.isNull(kuaiShouGroups)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (KuaiShouGroup kuaiShouGroup : kuaiShouGroups) {
|
|
|
+ AlarmRuleCampaignRel relEntity = new AlarmRuleCampaignRel();
|
|
|
+ relEntity.setEventRuleId(rule.getEventRuleId());
|
|
|
+ relEntity.setAccountId(rule.getAccountId());
|
|
|
+ relEntity.setEventRuleLevel(rule.getEventRuleLevel());
|
|
|
+ relEntity.setCampaignId(kuaiShouGroup.getCampaignId());
|
|
|
+ relEntity.setUnitId(kuaiShouGroup.getUnitId());
|
|
|
+ alarmRuleCampaignRelMapper.insert(relEntity);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //通过指定,传参IDS绑定应用
|
|
|
+ private void addRelByIds(JSONArray rels, AlarmEventRule rule) {
|
|
|
+ for (int k = 0; k < rels.size(); k++) {
|
|
|
+ AlarmRuleCampaignRel relEntity = new AlarmRuleCampaignRel();
|
|
|
+ JSONObject rel = rels.getJSONObject(k);
|
|
|
+ relEntity.setEventRuleId(rule.getEventRuleId());
|
|
|
+ relEntity.setAccountId(rule.getAccountId());
|
|
|
+ relEntity.setEventRuleLevel(rule.getEventRuleLevel());
|
|
|
+ relEntity.setCampaignId(rel.getLong("campaignId"));
|
|
|
+ relEntity.setUnitId(rel.getLong("unitId"));
|
|
|
+ alarmRuleCampaignRelMapper.insert(relEntity);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 规则实体类封装
|
|
|
+ * Message template
|
|
|
+ *
|
|
|
+ * @param
|
|
|
+ * @return void
|
|
|
+ * @throws
|
|
|
+ * @author ZHAOXA
|
|
|
+ */
|
|
|
+ private void reSetRuleEntity(AlarmEventRule rule, JSONObject obj) {
|
|
|
Long accountId = obj.getLong("accountId");
|
|
|
if (!Check.isNull(accountId)) {
|
|
|
rule.setAccountId(accountId);
|
|
|
}
|
|
|
- Long unitId = obj.getLong("unitId");
|
|
|
- if (!Check.isNull(unitId)) {
|
|
|
- rule.setUnitId(unitId);
|
|
|
+ Long campaignId = obj.getLong("campaignId");
|
|
|
+ if (!Check.isNull(campaignId)) {
|
|
|
+ rule.setCampaignId(campaignId);
|
|
|
}
|
|
|
String eventRuleName = obj.getString("eventRuleName");
|
|
|
if (!Check.isNull(eventRuleName)) {
|
|
@@ -136,266 +251,64 @@ public class AlarmEventRuleServiceImpl extends ServiceImpl<AlarmEventRuleMapper,
|
|
|
}
|
|
|
String metricValueName = obj.getString("metricValueName");
|
|
|
if (!Check.isNull(metricValueName)) {
|
|
|
- rule.setMetricValueCode(metricValueName);
|
|
|
+ rule.setMetricValueName(metricValueName);
|
|
|
}
|
|
|
String processMethod = obj.getString("processMethod");
|
|
|
if (!Check.isNull(processMethod)) {
|
|
|
rule.setProcessMethod(processMethod);
|
|
|
-
|
|
|
}
|
|
|
String eventRuleStatus = obj.getString("eventRuleStatus");
|
|
|
if (!Check.isNull(eventRuleStatus)) {
|
|
|
rule.setEventRuleStatus(eventRuleStatus);
|
|
|
}
|
|
|
+ rule.setCreaterId(obj.getString("createrId"));
|
|
|
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
|
|
if (!Check.isNull(sysUser)) {
|
|
|
rule.setCreaterId(sysUser.getId());
|
|
|
}
|
|
|
- QueryWrapper<AlarmEventRule> ruleWrapper = new QueryWrapper<>();
|
|
|
- ruleWrapper.eq("event_rule_id", obj.getLong("eventRuleId"));
|
|
|
- alarmEventRuleMapper.update(rule, ruleWrapper);
|
|
|
- JSONArray metrics = obj.getJSONArray("alarmEventMetric");
|
|
|
- if (Check.isNull(metrics)) {
|
|
|
- return;
|
|
|
- }
|
|
|
- for (int i = 0; i < metrics.size(); i++) {
|
|
|
- JSONObject mo = metrics.getJSONObject(i);
|
|
|
- AlarmEventMetric metric = new AlarmEventMetric();
|
|
|
- Long eventRuleId = rule.getEventRuleId();
|
|
|
- if (!Check.isNull(eventRuleId)) {
|
|
|
- metric.setEventRuleId(eventRuleId);
|
|
|
- }
|
|
|
- String valueCode = mo.getString("metricValueCode");
|
|
|
- if (!Check.isNull(valueCode)) {
|
|
|
- metric.setMetricValueCode(valueCode);
|
|
|
- }
|
|
|
- String valueName = mo.getString("metricValueName");
|
|
|
- if (!Check.isNull(valueName)) {
|
|
|
- metric.setMetricValueName(valueName);
|
|
|
- }
|
|
|
- String judgeType = mo.getString("judgeType");
|
|
|
- if (!Check.isNull(judgeType)) {
|
|
|
- metric.setJudgeType(judgeType);
|
|
|
- }
|
|
|
- String judgeMethod = mo.getString("judgeMethod");
|
|
|
- if (!Check.isNull(judgeMethod)) {
|
|
|
- metric.setJudgeMethod(judgeMethod);
|
|
|
- }
|
|
|
- String threshold = mo.getString("threshold");
|
|
|
- if (!Check.isNull(threshold)) {
|
|
|
- metric.setThreshold(threshold);
|
|
|
- }
|
|
|
- String minThreshold = mo.getString("minThreshold");
|
|
|
- if (!Check.isNull(minThreshold)) {
|
|
|
- metric.setMinThreshold(minThreshold);
|
|
|
- }
|
|
|
- String dataRange = mo.getString("dataRange");
|
|
|
- if (!Check.isNull(dataRange)) {
|
|
|
- metric.setDataRange(dataRange);
|
|
|
- }
|
|
|
- QueryWrapper<AlarmEventMetric> metricWrapper = new QueryWrapper<>();
|
|
|
- metricWrapper.eq("event_metric_id", mo.getLong("eventMetricId"));
|
|
|
- metricWrapper.eq("event_rule_id", obj.getLong("eventRuleId"));
|
|
|
- alarmEventMetricMapper.update(metric, metricWrapper);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public AlarmEventRule selectById(String id) {
|
|
|
- AlarmEventRule alarmEventRule = alarmEventRuleMapper.queryById(id);
|
|
|
- List<AlarmEventMetric> alarmEventMetricList = alarmEventMetricMapper.selectByEventRuleId(id);
|
|
|
- return alarmEventRule.setAlarmEventMetrics(alarmEventMetricList);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void matchAlarmRules(String checkType) {
|
|
|
- List<AlarmEventRule> allRules = getAllAlarmRules(checkType);
|
|
|
- List<JSONObject> accountCosts = getCostInfo("account");
|
|
|
- if (Check.isNull(allRules) || Check.isNull(accountCosts)) {
|
|
|
- return;
|
|
|
- }
|
|
|
- for (JSONObject cost : accountCosts) {
|
|
|
- for (AlarmEventRule rule : allRules) {
|
|
|
- if (cost.getLong("accountId") - rule.getAccountId() == 0) {
|
|
|
- matchRules(rule, cost);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private void matchRules(AlarmEventRule rule, JSONObject cost) {
|
|
|
- String rulesMetric = rule.getMetricValueCode();
|
|
|
- //目标成本
|
|
|
- BigDecimal value = cost.getBigDecimal(rulesMetric);
|
|
|
- if (Check.isNull(value)) {
|
|
|
- log.warn("规则中指标不匹配");
|
|
|
- return;
|
|
|
- }
|
|
|
- //总消耗
|
|
|
- BigDecimal totalCost = cost.getBigDecimal("totalCost");
|
|
|
- List<AlarmEventMetric> metrics = rule.getAlarmEventMetrics();
|
|
|
- if (Check.isNull(metrics)) {
|
|
|
- return;
|
|
|
- }
|
|
|
- boolean flag = true;
|
|
|
- StringBuffer depletionStr = new StringBuffer();
|
|
|
- StringBuffer valueStr = new StringBuffer();
|
|
|
- StringBuffer roiStr = new StringBuffer();
|
|
|
- if (metrics.size() > 1) {
|
|
|
- depletionStr.append("消耗");
|
|
|
- valueStr.append("并且成本");
|
|
|
- roiStr.append("并且ROI");
|
|
|
- } else {
|
|
|
- valueStr.append(metrics.get(0).getMetricValueName());
|
|
|
- }
|
|
|
- for (AlarmEventMetric metric : metrics) {
|
|
|
- if (flag) {
|
|
|
- //阈值
|
|
|
- BigDecimal threshold = new BigDecimal(metric.getThreshold());
|
|
|
- String judgeMethod = metric.getJudgeMethod();
|
|
|
- String metricValue = metric.getMetricValueCode();
|
|
|
- String sub = metricValue.substring(metricValue.lastIndexOf("_") + 1);
|
|
|
- //大于等于
|
|
|
- if ("GT_EQ".equals(judgeMethod)) {
|
|
|
- //判断阈值类型(cost-成本;depletion-消耗;roi)
|
|
|
- if ("depletion".equals(sub)) {
|
|
|
- flag = totalCost.compareTo(threshold) >= 0;
|
|
|
- depletionStr.append("高于").append("账户设置的消耗值:").append(threshold).append("元");
|
|
|
- continue;
|
|
|
- } else if ("roi".equals(sub)) {
|
|
|
- roiStr.append("高于").append("账户设置的ROI:").append(threshold.multiply(new BigDecimal(100)).setScale(2)).append("%");
|
|
|
- flag = value.compareTo(threshold) >= 0;
|
|
|
- continue;
|
|
|
- } else {
|
|
|
- valueStr.append("高于").append("账户设置的成本价格:").append(threshold).append("元");
|
|
|
- flag = value.compareTo(threshold) >= 0;
|
|
|
- continue;
|
|
|
- }
|
|
|
- //小于等于
|
|
|
- } else if ("LT_EQ".equals(judgeMethod)) {
|
|
|
- if ("depletion".equals(sub)) {
|
|
|
- depletionStr.append("低于").append("账户设置的消耗值:").append(threshold).append("元");
|
|
|
- flag = totalCost.compareTo(threshold) <= 0;
|
|
|
- continue;
|
|
|
- } else if ("roi".equals(sub)) {
|
|
|
- roiStr.append("低于").append("账户设置的ROI:").append(threshold.multiply(new BigDecimal(100)).setScale(2)).append("%");
|
|
|
- flag = value.compareTo(threshold) <= 0;
|
|
|
- continue;
|
|
|
- } else {
|
|
|
- valueStr.append("低于").append("账户设置的成本价格:").append(threshold).append("元");
|
|
|
- flag = value.compareTo(threshold) <= 0;
|
|
|
- continue;
|
|
|
- }
|
|
|
- //介于
|
|
|
- } else if ("BETWEEN".equals(judgeMethod)) {
|
|
|
- BigDecimal minThreshold = new BigDecimal(metric.getMinThreshold());
|
|
|
- if ("depletion".equals(sub)) {
|
|
|
- flag = (totalCost.compareTo(threshold) > 0) || (totalCost.compareTo(minThreshold) < 0);
|
|
|
- if (totalCost.compareTo(threshold) > 0) {
|
|
|
- depletionStr.append("高于");
|
|
|
- }
|
|
|
- if (totalCost.compareTo(minThreshold) < 0) {
|
|
|
- depletionStr.append("低于");
|
|
|
- }
|
|
|
- depletionStr.append("账户设置的消耗区间:").append(minThreshold).append("元-").append(threshold).append("元");
|
|
|
- continue;
|
|
|
- } else if ("roi".equals(sub)) {
|
|
|
- flag = (value.compareTo(threshold) > 0) || (value.compareTo(minThreshold) < 0);
|
|
|
- if (value.compareTo(threshold) > 0) {
|
|
|
- roiStr.append("高于");
|
|
|
- }
|
|
|
- if (value.compareTo(minThreshold) < 0) {
|
|
|
- roiStr.append("低于");
|
|
|
- }
|
|
|
- roiStr.append("账户设置的").append(rule.getMetricValueName()).append("区间:").append(minThreshold.multiply(new BigDecimal(100)).setScale(2)).append("%-").append(threshold.multiply(new BigDecimal(100)).setScale(2)).append("%");
|
|
|
- continue;
|
|
|
- } else {
|
|
|
- flag = (value.compareTo(threshold) > 0) || (value.compareTo(minThreshold) < 0);
|
|
|
- if (value.compareTo(threshold) > 0) {
|
|
|
- valueStr.append("高于");
|
|
|
- }
|
|
|
- if (value.compareTo(minThreshold) < 0) {
|
|
|
- valueStr.append("低于");
|
|
|
- }
|
|
|
- valueStr.append("账户设置的成本区间:").append(minThreshold).append("元-").append(threshold).append("元");
|
|
|
- continue;
|
|
|
- }
|
|
|
- } else {
|
|
|
- log.warn("缺失判断条件");
|
|
|
- }
|
|
|
- } else {
|
|
|
- break;
|
|
|
- }
|
|
|
+ if (!Check.isNull(obj.getString("appStatus")) && Check.isNull(obj.getJSONArray("rel"))) {
|
|
|
+ rule.setAppStatus(obj.getString("appStatus"));
|
|
|
}
|
|
|
- //规则满足,产生预警
|
|
|
- if (flag) {
|
|
|
- cost.put("accountName", rule.getAccountName());
|
|
|
- cost.put("name", rule.getMetricValueName());
|
|
|
- if (metrics.size() > 1) {
|
|
|
- if (rule.getMetricValueCode().toLowerCase().contains("roi")) {
|
|
|
- cost.put("depletion", depletionStr.append("<br/>").append(roiStr).toString());
|
|
|
- } else {
|
|
|
- cost.put("depletion", depletionStr.append("<br/>").append(valueStr).toString());
|
|
|
- }
|
|
|
- } else {
|
|
|
- cost.put("depletion", valueStr.toString());
|
|
|
- }
|
|
|
- String msg = null;
|
|
|
- if ("SEND".equals(rule.getProcessMethod())) {
|
|
|
- cost.put("end", "请您及时查看并调整!");
|
|
|
- msg = messageTemplate.getAlarmCostMessage(cost);
|
|
|
- } else {
|
|
|
- cost.put("end", "现已被关停,请您及时查看并调整!");
|
|
|
- msg = messageTemplate.getAlarmCostMessage(cost);
|
|
|
- }
|
|
|
- if (!Check.isNull(msg)) {
|
|
|
- sendMessageService.sendMessage(rule.getUserId(), msg);
|
|
|
-
|
|
|
- AlarmEventSend send = new AlarmEventSend();
|
|
|
- send.setAlarmDetail(msg);
|
|
|
- send.setAlarmStatus(NoEn.NO1.valueStr());
|
|
|
- send.setMetricValueCode(rule.getMetricValueCode());
|
|
|
- send.setEventRuleId(rule.getEventRuleId());
|
|
|
- send.setAlarmCondition(rule.getMetricValueName() + "预警:" + cost.getString("depletion"));
|
|
|
- alarmEventSendMapper.insert(send);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取成本数据。
|
|
|
- *
|
|
|
- * @param code : unit 组级数据,account 账户级数据
|
|
|
- * @return java.util.List<cn.com.ctop.kuaishou.modules.report.entity.KuaishouCostGroup>
|
|
|
- * @throws
|
|
|
- * @author ZHAOXA
|
|
|
- */
|
|
|
- private List<JSONObject> getCostInfo(String code) {
|
|
|
- HashOperations<String, Object, Object> hahs = DataSourceCachePool.getRedisTemplate().opsForHash();
|
|
|
- return (List<JSONObject>) hahs.get("KS_COST", code);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取告警规则集合
|
|
|
+ * 填充规则详细实体类
|
|
|
*
|
|
|
* @param
|
|
|
- * @return java.util.List<cn.com.ctop.alarm.modules.entity.AlarmEventRules>
|
|
|
+ * @return void
|
|
|
* @throws
|
|
|
* @author ZHAOXA
|
|
|
*/
|
|
|
- private List<AlarmEventRule> getAllAlarmRules(String checkType) {
|
|
|
- AlarmEventRule alarmEventRule = new AlarmEventRule();
|
|
|
- alarmEventRule.setEventRuleStatus(NoEn.NO1.valueStr());
|
|
|
- alarmEventRule.setCheckFrequency(checkType);
|
|
|
- List<AlarmEventRule> ruleList = alarmEventRuleMapper.selectListPage(alarmEventRule);
|
|
|
- if (!Check.isNull(ruleList)) {
|
|
|
- for (AlarmEventRule rule : ruleList) {
|
|
|
- QueryWrapper<AlarmEventMetric> metricWrapper = new QueryWrapper<>();
|
|
|
- metricWrapper.eq("event_rule_id", rule.getEventRuleId());
|
|
|
- rule.setAlarmEventMetrics(alarmEventMetricMapper.selectList(metricWrapper));
|
|
|
- }
|
|
|
+ private void reSetMetricEntity(AlarmEventMetric metric, JSONObject mo, Long ruleId) {
|
|
|
+ metric.setEventRuleId(ruleId);
|
|
|
+ String valueCode = mo.getString("metricValueCode");
|
|
|
+ if (!Check.isNull(valueCode)) {
|
|
|
+ metric.setMetricValueCode(valueCode);
|
|
|
+ }
|
|
|
+ String valueName = mo.getString("metricValueName");
|
|
|
+ if (!Check.isNull(valueName)) {
|
|
|
+ metric.setMetricValueName(valueName);
|
|
|
+ }
|
|
|
+ String judgeType = mo.getString("judgeType");
|
|
|
+ if (!Check.isNull(judgeType)) {
|
|
|
+ metric.setJudgeType(judgeType);
|
|
|
+ }
|
|
|
+ String judgeMethod = mo.getString("judgeMethod");
|
|
|
+ if (!Check.isNull(judgeMethod)) {
|
|
|
+ metric.setJudgeMethod(judgeMethod);
|
|
|
+ }
|
|
|
+ String threshold = mo.getString("threshold");
|
|
|
+ if (!Check.isNull(threshold)) {
|
|
|
+ metric.setThreshold(threshold);
|
|
|
+ }
|
|
|
+ String minThreshold = mo.getString("minThreshold");
|
|
|
+ if (!Check.isNull(minThreshold)) {
|
|
|
+ metric.setMinThreshold(minThreshold);
|
|
|
+ }
|
|
|
+ String dataRange = mo.getString("dataRange");
|
|
|
+ if (!Check.isNull(dataRange)) {
|
|
|
+ metric.setDataRange(dataRange);
|
|
|
}
|
|
|
- return ruleList;
|
|
|
}
|
|
|
|
|
|
}
|