202 lines
5.5 KiB
Go
202 lines
5.5 KiB
Go
package service
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"time"
|
|
|
|
"be.ems/src/framework/constants"
|
|
"be.ems/src/framework/i18n"
|
|
"be.ems/src/framework/utils/date"
|
|
"be.ems/src/framework/utils/file"
|
|
"be.ems/src/modules/network_data/model"
|
|
"be.ems/src/modules/network_data/repository"
|
|
sysService "be.ems/src/modules/system/service"
|
|
)
|
|
|
|
// 实例化数据层 Alarm 结构体
|
|
var NewAlarm = &Alarm{
|
|
alarmRepository: repository.NewAlarm,
|
|
}
|
|
|
|
// Alarm 告警 服务层处理
|
|
type Alarm struct {
|
|
alarmRepository *repository.Alarm // 告警数据信息
|
|
}
|
|
|
|
// FindByPage 根据条件分页查询
|
|
func (r Alarm) FindByPage(query model.AlarmQuery) ([]model.Alarm, int64) {
|
|
return r.alarmRepository.SelectByPage(query)
|
|
}
|
|
|
|
// Find 查询
|
|
func (r Alarm) Find(param model.Alarm) []model.Alarm {
|
|
return r.alarmRepository.Select(param)
|
|
}
|
|
|
|
// Insert 新增信息
|
|
func (s Alarm) Insert(param model.Alarm) int64 {
|
|
return s.alarmRepository.Insert(param)
|
|
}
|
|
|
|
// Update 修改信息
|
|
func (s Alarm) Update(param model.Alarm) int64 {
|
|
return s.alarmRepository.Update(param)
|
|
}
|
|
|
|
// DeleteByIds 批量删除信息
|
|
func (r Alarm) DeleteByIds(ids []int64) (int64, error) {
|
|
// 检查是否存在
|
|
data := r.alarmRepository.SelectByIds(ids)
|
|
if len(data) <= 0 {
|
|
return 0, fmt.Errorf("no data")
|
|
}
|
|
|
|
if len(data) == len(ids) {
|
|
rows := r.alarmRepository.DeleteByIds(ids)
|
|
return rows, nil
|
|
}
|
|
// 删除信息失败!
|
|
return 0, fmt.Errorf("delete fail")
|
|
}
|
|
|
|
// FindAlarmSeqLast 查询网元告警最后一条序号
|
|
func (s Alarm) FindAlarmSeqLast(neType, neId string) int64 {
|
|
return s.alarmRepository.SelectAlarmSeqLast(neType, neId)
|
|
}
|
|
|
|
// AlarmClearByIds 批量清除告警信息
|
|
func (r Alarm) AlarmClearByIds(ids []int64, clearUser string) (int64, error) {
|
|
// 检查是否存在
|
|
arr := r.alarmRepository.SelectByIds(ids)
|
|
if len(arr) <= 0 {
|
|
return 0, fmt.Errorf("no data")
|
|
}
|
|
|
|
if len(arr) == len(ids) {
|
|
var rows int64 = 0
|
|
for _, v := range arr {
|
|
// 状态检查AlarmCode变更告警ID
|
|
if v.AlarmCode == constants.ALARM_STATE_CHECK {
|
|
v.AlarmId = fmt.Sprintf("%d%d", v.AlarmCode, v.EventTime)
|
|
}
|
|
v.AlarmStatus = "0"
|
|
// 告警清除
|
|
v.ClearType = 2
|
|
v.ClearTime = time.Now().UnixMilli()
|
|
v.ClearUser = clearUser
|
|
rows += r.alarmRepository.Update(v)
|
|
}
|
|
return rows, nil
|
|
}
|
|
// 清除失败!
|
|
return 0, fmt.Errorf("clear fail")
|
|
}
|
|
|
|
// AlarmAckByIds 批量确认清除告警信息
|
|
func (r Alarm) AlarmAckByIds(ids []int64, ackUser string, ackState bool) (int64, error) {
|
|
// 检查是否存在
|
|
arr := r.alarmRepository.SelectByIds(ids)
|
|
if len(arr) <= 0 {
|
|
return 0, fmt.Errorf("no data")
|
|
}
|
|
|
|
if len(arr) == len(ids) {
|
|
var rows int64 = 0
|
|
for _, v := range arr {
|
|
// 确认清除
|
|
if ackState {
|
|
v.AckState = 1
|
|
} else {
|
|
v.AckState = 0
|
|
}
|
|
v.AckTime = time.Now().UnixMilli()
|
|
v.AckUser = ackUser
|
|
rows += r.alarmRepository.Update(v)
|
|
}
|
|
return rows, nil
|
|
}
|
|
// 清除失败!
|
|
return 0, fmt.Errorf("ack fail")
|
|
}
|
|
|
|
// ExportXlsx 导出数据到 xlsx 文件
|
|
func (r Alarm) ExportXlsx(rows []model.Alarm, fileName, language, alarmStatus string) (string, error) {
|
|
// 第一行表头标题
|
|
headerCells := map[string]string{
|
|
"A1": i18n.TKey(language, "alarm.export.alarmType"),
|
|
"B1": i18n.TKey(language, "alarm.export.origSeverity"),
|
|
"C1": i18n.TKey(language, "alarm.export.alarmTitle"),
|
|
"D1": i18n.TKey(language, "alarm.export.eventTime"),
|
|
"E1": i18n.TKey(language, "alarm.export.alarmId"),
|
|
"F1": i18n.TKey(language, "alarm.export.alarmCode"),
|
|
"G1": i18n.TKey(language, "ne.common.neType"),
|
|
"H1": i18n.TKey(language, "ne.common.neName"),
|
|
"I1": i18n.TKey(language, "ne.common.neId"),
|
|
}
|
|
if alarmStatus == "0" {
|
|
headerCells["J1"] = i18n.TKey(language, "alarm.export.clearUser")
|
|
headerCells["K1"] = i18n.TKey(language, "alarm.export.clearTime")
|
|
headerCells["L1"] = i18n.TKey(language, "alarm.export.clearType")
|
|
}
|
|
// 读取字典数据 告警原始严重程度
|
|
dictActiveAlarmType := sysService.NewSysDictData.FindByType("active_alarm_type")
|
|
// 读取字典数据 告警类型
|
|
dictActiveClearType := sysService.NewSysDictData.FindByType("active_clear_type")
|
|
// 读取字典数据 告警确认类型
|
|
dictActiveAlarmSeverity := sysService.NewSysDictData.FindByType("active_alarm_severity")
|
|
// 从第二行开始的数据
|
|
dataCells := make([]map[string]any, 0)
|
|
for i, row := range rows {
|
|
idx := strconv.Itoa(i + 2)
|
|
|
|
// 原始严重程度
|
|
origSeverity := "-"
|
|
for _, v := range dictActiveAlarmSeverity {
|
|
if row.OrigSeverity == v.DataValue {
|
|
origSeverity = i18n.TKey(language, v.DataLabel)
|
|
break
|
|
}
|
|
}
|
|
// 活动告警类型
|
|
alarmType := "-"
|
|
for _, v := range dictActiveAlarmType {
|
|
if row.AlarmType == v.DataValue {
|
|
alarmType = i18n.TKey(language, v.DataLabel)
|
|
break
|
|
}
|
|
}
|
|
// 告警清除类型
|
|
clearType := "-"
|
|
for _, v := range dictActiveClearType {
|
|
if fmt.Sprint(row.ClearType) == v.DataValue {
|
|
clearType = i18n.TKey(language, v.DataLabel)
|
|
break
|
|
}
|
|
}
|
|
eventTimeStr := date.ParseDateToStr(row.EventTime, date.YYYY_MM_DDTHH_MM_SSZ)
|
|
|
|
cells := map[string]any{
|
|
"A" + idx: alarmType,
|
|
"B" + idx: origSeverity,
|
|
"C" + idx: row.AlarmTitle,
|
|
"D" + idx: eventTimeStr,
|
|
"E" + idx: row.AlarmId,
|
|
"F" + idx: row.AlarmCode,
|
|
"G" + idx: row.NeType,
|
|
"H" + idx: row.NeName,
|
|
"I" + idx: row.NeId,
|
|
}
|
|
if alarmStatus == "0" {
|
|
clearTimeStr := date.ParseDateToStr(row.ClearTime, date.YYYY_MM_DDTHH_MM_SSZ)
|
|
cells["J"+idx] = row.ClearUser
|
|
cells["K"+idx] = clearType
|
|
cells["L"+idx] = clearTimeStr
|
|
}
|
|
dataCells = append(dataCells, cells)
|
|
}
|
|
|
|
// 导出数据表格
|
|
return file.WriteSheet(headerCells, dataCells, fileName, "")
|
|
}
|