package com.jjt.hl.service.impl; import com.jjt.biz.domain.BizObjMetrics; import com.jjt.common.utils.DateUtils; import com.jjt.common.utils.IntervalUtil; import com.jjt.common.utils.StringUtils; import com.jjt.hl.domain.HlEvent; import com.jjt.hl.mapper.HlEventMapper; import com.jjt.hl.service.IHlEventService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; /** * 健康度事件记录Service业务层处理 * * @author jjt * @date 2024-09-16 */ @Service public class HlEventServiceImpl implements IHlEventService { @Resource private HlEventMapper hlEventMapper; /** * 查询健康度事件记录 * * @param eventId 健康度事件记录主键 * @return 健康度事件记录 */ @Override public HlEvent selectHlEventByEventId(Long eventId) { return hlEventMapper.selectHlEventByEventId(eventId); } /** * 查询健康度事件记录列表 * * @param hlEvent 健康度事件记录 * @return 健康度事件记录 */ @Override public List selectHlEventList(HlEvent hlEvent) { return hlEventMapper.selectHlEventList(hlEvent); } /** * 新增健康度事件记录 * * @param hlEvent 健康度事件记录 * @return 结果 */ @Override public int insertHlEvent(HlEvent hlEvent) { hlEvent.setCreateTime(DateUtils.getNowDate()); return hlEventMapper.insertHlEvent(hlEvent); } /** * 修改健康度事件记录 * * @param hlEvent 健康度事件记录 * @return 结果 */ @Override public int updateHlEvent(HlEvent hlEvent) { hlEvent.setUpdateTime(DateUtils.getNowDate()); return hlEventMapper.updateHlEvent(hlEvent); } /** * 批量删除健康度事件记录 * * @param eventIds 需要删除的健康度事件记录主键 * @return 结果 */ @Override public int deleteHlEventByEventIds(Long[] eventIds) { return hlEventMapper.deleteHlEventByEventIds(eventIds); } /** * 删除健康度事件记录信息 * * @param eventId 健康度事件记录主键 * @return 结果 */ @Override public int deleteHlEventByEventId(Long eventId) { return hlEventMapper.deleteHlEventByEventId(eventId); } /** * 处理事件 * * @param om 指标对象 * @param eventMap 当前事件列表 * @param date 数据时间 * @return */ @Override public Map process(BizObjMetrics om, Map eventMap, Date date) { Map result = new HashMap<>(16); if (StringUtils.isEmpty(om.getEvent())) { //如果没有设置事件,则不做任何处理 return result; } //当前是否产生事件 boolean eventFlag = isEvent(om.getDValue().floatValue(), om.getEvent()); //之前是否有事件 HlEvent hlEvent = eventMap.get(om.getObjMetricsId()); if (eventFlag) { //如果之前有事件,不管 //如果没有事件,则添加事件 if (hlEvent == null) { hlEvent = new HlEvent(); hlEvent.setObjId(om.getObjId()); hlEvent.setObjMetricsId(om.getObjMetricsId()); hlEvent.setEventStatus("1"); hlEvent.setEventValue(om.getDValue()); hlEvent.setStartTime(date); hlEvent.setCreateTime(new Date()); result.put("add", hlEvent); // insertHlEvent(hlEvent); } } else if (hlEvent != null) { //如果现在没有,之前有,需要结束上一次事件 hlEvent.setEventStatus("2"); hlEvent.setEndTime(date); result.put("update", hlEvent); // updateHlEvent(hlEvent); } return result; } /** * 通过对象ID查询当前事件的列表,并转换成map * * @param objId 对象ID * @return 结果 */ @Override public Map selectHlEventListCurr(Long objId) { HlEvent eventSearch = new HlEvent(); eventSearch.setObjId(objId); eventSearch.setEventStatus("1"); List events = selectHlEventList(eventSearch); return events.stream().collect(Collectors.toMap(HlEvent::getObjMetricsId, Function.identity(), (existing, replacement) -> existing)); } /** * 查询是否已经有事件产生 * * @param metricsId 指标ID * @return 结果 */ // private HlEvent exists(Long metricsId) { // HlEvent search = new HlEvent(); // search.setObjMetricsId(metricsId); // search.setEventStatus("1"); // // List list = selectHlEventList(search); // if (list.size() > 0) { // return list.get(0); // } else { // return null; // } // } /** * 获取告警等级 * * @param value 值 * @param event 事件表达式 * @return 结果 */ private boolean isEvent(Float value, String event) { return IntervalUtil.inNumRange(value, event); } }