|
@@ -42,7 +42,7 @@ type Warning struct {
|
|
|
T_Ut time.Time `orm:"type(timestamp);null;" gorm:"column:t__ut"` // 采集时间
|
|
T_Ut time.Time `orm:"type(timestamp);null;" gorm:"column:t__ut"` // 采集时间
|
|
|
T_fUt time.Time `orm:"type(timestamp);null;" gorm:"column:t_f_ut"` // 首次采集时间
|
|
T_fUt time.Time `orm:"type(timestamp);null;" gorm:"column:t_f_ut"` // 首次采集时间
|
|
|
|
|
|
|
|
- T_Text string `orm:"type(text);null" gorm:"column:t__text"` // 处理备注|T_uuid
|
|
|
|
|
|
|
+ T_Text string `orm:"type(text);null" gorm:"column:t__text"` // 处理备注
|
|
|
T_Log string `orm:"type(text);null" gorm:"column:t__log"` // 通知日志
|
|
T_Log string `orm:"type(text);null" gorm:"column:t__log"` // 通知日志
|
|
|
T_Msid int64 `orm:"size(256);null" gorm:"column:t__msid"` // 消息ID
|
|
T_Msid int64 `orm:"size(256);null" gorm:"column:t__msid"` // 消息ID
|
|
|
|
|
|
|
@@ -58,6 +58,14 @@ func (u *Warning) TableIndex() [][]string {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// 处理记录
|
|
|
|
|
+type HandlingRecord struct {
|
|
|
|
|
+ Remark string `json:"remark"` // 处理备注
|
|
|
|
|
+ Handler string `json:"handler"` // 处理人
|
|
|
|
|
+ Handler_uuid string `json:"handler_uuid"` // 处理人uuid
|
|
|
|
|
+ HandledAt time.Time `json:"handledAt"` // 处理时间
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
/*
|
|
/*
|
|
|
分表机制
|
|
分表机制
|
|
|
|--------30天--------|
|
|
|--------30天--------|
|
|
@@ -82,6 +90,7 @@ type Warning_R struct {
|
|
|
T_Ut string // 采集时间
|
|
T_Ut string // 采集时间
|
|
|
T_fUt string // 首次采集时间
|
|
T_fUt string // 首次采集时间
|
|
|
T_Text string // 处理备注
|
|
T_Text string // 处理备注
|
|
|
|
|
+ T_handler string // 处理人
|
|
|
T_Log []string // 处理日志
|
|
T_Log []string // 处理日志
|
|
|
T_Msid int64 // 消息ID
|
|
T_Msid int64 // 消息ID
|
|
|
T_State int // 0 删除 1 未处理 2 已处理
|
|
T_State int // 0 删除 1 未处理 2 已处理
|
|
@@ -104,6 +113,7 @@ type CompanyWarning_R struct {
|
|
|
T_Ut string // 采集时间
|
|
T_Ut string // 采集时间
|
|
|
T_fUt string // 首次采集时间
|
|
T_fUt string // 首次采集时间
|
|
|
T_Text string // 处理备注
|
|
T_Text string // 处理备注
|
|
|
|
|
+ T_handler string // 处理人
|
|
|
T_Log []string // 处理日志
|
|
T_Log []string // 处理日志
|
|
|
T_Msid int64 // 消息ID
|
|
T_Msid int64 // 消息ID
|
|
|
T_State int // 0 删除 1 未处理 2 已处理
|
|
T_State int // 0 删除 1 未处理 2 已处理
|
|
@@ -125,6 +135,7 @@ type Warning_Applet struct {
|
|
|
T_Ut string // 采集时间
|
|
T_Ut string // 采集时间
|
|
|
T_fUt string // 首次采集时间
|
|
T_fUt string // 首次采集时间
|
|
|
T_Text string // 处理备注
|
|
T_Text string // 处理备注
|
|
|
|
|
+ T_handler string // 处理人
|
|
|
T_Log []string // 处理日志
|
|
T_Log []string // 处理日志
|
|
|
T_Msid int64 // 消息ID
|
|
T_Msid int64 // 消息ID
|
|
|
T_State int // 0 删除 1 未处理 2 已处理
|
|
T_State int // 0 删除 1 未处理 2 已处理
|
|
@@ -250,7 +261,9 @@ func WarningToWarning_R(T_history int, t Warning) (r Warning_R) {
|
|
|
if !t.T_fUt.IsZero() {
|
|
if !t.T_fUt.IsZero() {
|
|
|
r.T_fUt = t.T_fUt.Format("2006-01-02 15:04:05")
|
|
r.T_fUt = t.T_fUt.Format("2006-01-02 15:04:05")
|
|
|
}
|
|
}
|
|
|
- r.T_Text = t.T_Text
|
|
|
|
|
|
|
+ //r.T_Text = t.T_Text
|
|
|
|
|
+ r.T_Text = GetLatestRemark(t)
|
|
|
|
|
+ r.T_handler = GetHandlers(t)
|
|
|
if len(t.T_Log) > 0 {
|
|
if len(t.T_Log) > 0 {
|
|
|
r.T_Log = strings.Split(strings.TrimRight(t.T_Log, "\n"), "\n")
|
|
r.T_Log = strings.Split(strings.TrimRight(t.T_Log, "\n"), "\n")
|
|
|
}
|
|
}
|
|
@@ -277,7 +290,8 @@ func WarningToAdminWarning_R(T_history int, t Warning) (r Warning_R) {
|
|
|
if !t.T_fUt.IsZero() {
|
|
if !t.T_fUt.IsZero() {
|
|
|
r.T_fUt = t.T_fUt.Format("2006-01-02 15:04:05")
|
|
r.T_fUt = t.T_fUt.Format("2006-01-02 15:04:05")
|
|
|
}
|
|
}
|
|
|
- r.T_Text = t.T_Text
|
|
|
|
|
|
|
+ r.T_Text = GetLatestRemark(t)
|
|
|
|
|
+ r.T_handler = GetHandlers(t)
|
|
|
if len(t.T_Log) > 0 {
|
|
if len(t.T_Log) > 0 {
|
|
|
r.T_Log = strings.Split(strings.TrimRight(t.T_Log, "\n"), "\n")
|
|
r.T_Log = strings.Split(strings.TrimRight(t.T_Log, "\n"), "\n")
|
|
|
}
|
|
}
|
|
@@ -304,7 +318,8 @@ func WarningToCompanyWarning_R(T_history int, t Warning) (r CompanyWarning_R) {
|
|
|
if !t.T_fUt.IsZero() {
|
|
if !t.T_fUt.IsZero() {
|
|
|
r.T_fUt = t.T_fUt.Format("2006-01-02 15:04:05")
|
|
r.T_fUt = t.T_fUt.Format("2006-01-02 15:04:05")
|
|
|
}
|
|
}
|
|
|
- r.T_Text = t.T_Text
|
|
|
|
|
|
|
+ r.T_Text = GetLatestRemark(t)
|
|
|
|
|
+ r.T_handler = GetHandlers(t)
|
|
|
if len(t.T_Log) > 0 {
|
|
if len(t.T_Log) > 0 {
|
|
|
r.T_Log = strings.Split(strings.TrimRight(t.T_Log, "\n"), "\n")
|
|
r.T_Log = strings.Split(strings.TrimRight(t.T_Log, "\n"), "\n")
|
|
|
}
|
|
}
|
|
@@ -333,7 +348,8 @@ func WarningToWarning_Applet(t Warning) (r Warning_Applet) {
|
|
|
if !t.T_fUt.IsZero() {
|
|
if !t.T_fUt.IsZero() {
|
|
|
r.T_fUt = t.T_fUt.Format("2006-01-02 15:04:05")
|
|
r.T_fUt = t.T_fUt.Format("2006-01-02 15:04:05")
|
|
|
}
|
|
}
|
|
|
- r.T_Text = t.T_Text
|
|
|
|
|
|
|
+ r.T_Text = GetLatestRemark(t)
|
|
|
|
|
+ r.T_handler = GetHandlers(t)
|
|
|
if len(t.T_Log) > 0 {
|
|
if len(t.T_Log) > 0 {
|
|
|
r.T_Log = strings.Split(strings.TrimRight(t.T_Log, "\n"), "\n")
|
|
r.T_Log = strings.Split(strings.TrimRight(t.T_Log, "\n"), "\n")
|
|
|
}
|
|
}
|
|
@@ -1784,7 +1800,7 @@ func checkStringListContinuous(nums []string) (int, int, bool) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// BatchHandle 处理本公司指定类型40天内的所有报警数据
|
|
// BatchHandle 处理本公司指定类型40天内的所有报警数据
|
|
|
-func BatchHandle(Pid, T_tp int, T_Text, T_uuid string) bool {
|
|
|
|
|
|
|
+func BatchHandle(Pid, T_tp int, T_Text, T_name, T_uuid string) bool {
|
|
|
var warings []Warning
|
|
var warings []Warning
|
|
|
var err error
|
|
var err error
|
|
|
|
|
|
|
@@ -1798,21 +1814,29 @@ func BatchHandle(Pid, T_tp int, T_Text, T_uuid string) bool {
|
|
|
}()
|
|
}()
|
|
|
err = begin.Model(&Warning{}).Where("t_pid =?", Pid).
|
|
err = begin.Model(&Warning{}).Where("t_pid =?", Pid).
|
|
|
Where("t__state != ?", 2).
|
|
Where("t__state != ?", 2).
|
|
|
- Where("t_tp = ?", T_tp).Find(&warings).Updates(map[string]any{
|
|
|
|
|
- "t__text": T_Text,
|
|
|
|
|
- "t__state": 2,
|
|
|
|
|
- }).Error
|
|
|
|
|
|
|
+ Where("t_tp = ?", T_tp).Find(&warings).Error
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- logs.Error("报警记录信息更新失败", err)
|
|
|
|
|
|
|
+ logs.Error("查询报警记录信息失败", err)
|
|
|
return false
|
|
return false
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
for _, waring := range warings {
|
|
for _, waring := range warings {
|
|
|
|
|
+ text := AddHandlingRecord(waring, T_Text, T_name, T_uuid)
|
|
|
|
|
+ err = begin.Model(&waring).Updates(map[string]any{
|
|
|
|
|
+ "t__text": text,
|
|
|
|
|
+ "t__state": 2,
|
|
|
|
|
+ }).Error
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ logs.Error("报警记录信息更新失败", err)
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
Wtab := "warning"
|
|
Wtab := "warning"
|
|
|
T_year, T_month := waring.CreateTime.Format("2006"), waring.CreateTime.Format("01")
|
|
T_year, T_month := waring.CreateTime.Format("2006"), waring.CreateTime.Format("01")
|
|
|
Wtab += "_" + T_year + "_" + T_month
|
|
Wtab += "_" + T_year + "_" + T_month
|
|
|
waring.T_State = 2
|
|
waring.T_State = 2
|
|
|
waring.UpdateTime = time.Now()
|
|
waring.UpdateTime = time.Now()
|
|
|
- waring.T_Text = T_Text
|
|
|
|
|
|
|
+ waring.T_Text = text
|
|
|
backups := Update_Warning_Backups(waring, T_year, T_month)
|
|
backups := Update_Warning_Backups(waring, T_year, T_month)
|
|
|
if !backups {
|
|
if !backups {
|
|
|
err = errors.New("更新报警信息失败")
|
|
err = errors.New("更新报警信息失败")
|
|
@@ -1823,6 +1847,79 @@ func BatchHandle(Pid, T_tp int, T_Text, T_uuid string) bool {
|
|
|
return true
|
|
return true
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+func GetHandlingRecords(w Warning) ([]HandlingRecord, error) {
|
|
|
|
|
+ if len(w.T_Text) == 0 {
|
|
|
|
|
+ return nil, nil
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 尝试解析为新格式
|
|
|
|
|
+ var records []HandlingRecord
|
|
|
|
|
+ if err := json.Unmarshal([]byte(w.T_Text), &records); err == nil {
|
|
|
|
|
+ return records, nil
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 如果都不是JSON格式,直接作为字符串处理
|
|
|
|
|
+ return []HandlingRecord{
|
|
|
|
|
+ {
|
|
|
|
|
+ Remark: w.T_Text,
|
|
|
|
|
+ Handler: "",
|
|
|
|
|
+ HandledAt: w.UpdateTime,
|
|
|
|
|
+ },
|
|
|
|
|
+ }, nil
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func AddHandlingRecord(w Warning, remark, handler, handler_uuid string) string {
|
|
|
|
|
+ // 获取现有记录
|
|
|
|
|
+ existingRecords, _ := GetHandlingRecords(w)
|
|
|
|
|
+ if existingRecords == nil {
|
|
|
|
|
+ existingRecords = []HandlingRecord{}
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 添加新记录
|
|
|
|
|
+ newRecord := HandlingRecord{
|
|
|
|
|
+ Remark: remark,
|
|
|
|
|
+ Handler: handler,
|
|
|
|
|
+ Handler_uuid: handler_uuid,
|
|
|
|
|
+ HandledAt: time.Now(),
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 创建新格式数据
|
|
|
|
|
+ records := append(existingRecords, newRecord)
|
|
|
|
|
+
|
|
|
|
|
+ // 序列化为JSON
|
|
|
|
|
+ jsonData, err := json.Marshal(records)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return ""
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return string(jsonData)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func GetLatestRemark(w Warning) string {
|
|
|
|
|
+ records, err := GetHandlingRecords(w)
|
|
|
|
|
+ if err != nil || len(records) == 0 {
|
|
|
|
|
+ // 如果是旧数据,直接返回原始文本
|
|
|
|
|
+ if len(w.T_Text) > 0 && w.T_Text[0] != '{' {
|
|
|
|
|
+ return w.T_Text
|
|
|
|
|
+ }
|
|
|
|
|
+ return ""
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 返回最新的一条备注
|
|
|
|
|
+ return records[len(records)-1].Remark
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// 获取处理人信息
|
|
|
|
|
+func GetHandlers(w Warning) string {
|
|
|
|
|
+ records, err := GetHandlingRecords(w)
|
|
|
|
|
+ if err != nil || len(records) == 0 {
|
|
|
|
|
+ return ""
|
|
|
|
|
+ }
|
|
|
|
|
+ // 返回最新的一条处理人
|
|
|
|
|
+ return records[len(records)-1].Handler
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func IsWarn(Pid int) bool {
|
|
func IsWarn(Pid int) bool {
|
|
|
var warings []Warning
|
|
var warings []Warning
|
|
|
var err error
|
|
var err error
|