فهرست منبع

add:报警管理增加处理人

zoie 2 ماه پیش
والد
کامیت
5b2c1458d5
3فایلهای تغییر یافته به همراه122 افزوده شده و 17 حذف شده
  1. 9 5
      controllers/Warning.go
  2. 4 0
      models/Device/DeviceSensor.go
  3. 109 12
      models/Warning/Warning.go

+ 9 - 5
controllers/Warning.go

@@ -566,7 +566,8 @@ func (c *DeviceController) DeviceWarning_Post() {
 			c.ServeJSON()
 			return
 		}
-		warning.T_Text = T_Text
+		text := Warning.AddHandlingRecord(warning, T_Text, c.Admin_r.T_name, c.Admin_r.T_uuid)
+		warning.T_Text = text
 		warning.T_State = 2
 		warning.UpdateTime = time.Now()
 		if is := Warning.Update_Warning_Backups(warning, T_year, T_month); !is {
@@ -577,7 +578,8 @@ func (c *DeviceController) DeviceWarning_Post() {
 
 		warning = Warning.Read_Warning_ById(int64(id))
 		if warning.Id > 0 {
-			warning.T_Text = T_Text
+			text = Warning.AddHandlingRecord(warning, T_Text, c.Admin_r.T_name, c.Admin_r.T_uuid)
+			warning.T_Text = text
 			warning.T_State = 2
 			warning.UpdateTime = time.Now()
 			if is := Warning.Update_Warning(warning, "T_Text", "T_State", "UpdateTime"); !is {
@@ -592,7 +594,8 @@ func (c *DeviceController) DeviceWarning_Post() {
 
 		warning = Warning.Read_Warning_ById(int64(id))
 		if warning.Id > 0 {
-			warning.T_Text = T_Text
+			text := Warning.AddHandlingRecord(warning, T_Text, c.Admin_r.T_name, c.Admin_r.T_uuid)
+			warning.T_Text = text
 			warning.T_State = 2
 			warning.UpdateTime = time.Now()
 			if is := Warning.Update_Warning(warning, "T_Text", "T_State", "UpdateTime"); !is {
@@ -613,7 +616,8 @@ func (c *DeviceController) DeviceWarning_Post() {
 			return
 		}
 		if warningBackups.Id > 0 {
-			warningBackups.T_Text = T_Text
+			text := Warning.AddHandlingRecord(warningBackups, T_Text, c.Admin_r.T_name, c.Admin_r.T_uuid)
+			warningBackups.T_Text = text
 			warningBackups.T_State = 2
 			warningBackups.UpdateTime = time.Now()
 			if is := Warning.Update_Warning_Backups(warningBackups, T_year, T_month); !is {
@@ -648,7 +652,7 @@ func (c *DeviceController) AppBatchWarning() {
 		c.ServeJSON()
 		return
 	}
-	handle := Warning.BatchHandle(c.T_pid, T_tp, T_Text, c.Admin_r.T_uuid)
+	handle := Warning.BatchHandle(c.T_pid, T_tp, T_Text, c.Admin_r.T_name, c.Admin_r.T_uuid)
 	if !handle {
 		c.Data["json"] = lib.JSONS{Code: 202, Msg: "处理报警信息失败"}
 		c.ServeJSON()

+ 4 - 0
models/Device/DeviceSensor.go

@@ -1187,6 +1187,7 @@ func Read_DeviceSensor_List_For_Data(bindSN []string, T_pid int, T_name string,
 		}
 		var DeviceSensor_unusual []DeviceSensor_R
 		var DeviceSensor_monitor []DeviceSensor_R
+		var DeviceSensor_monitor2 []DeviceSensor_R
 		for _, v := range r {
 			v_r := DeviceSensorToDeviceSensor_R(v)
 			data := v_r.T_DeviceSensorData
@@ -1195,11 +1196,14 @@ func Read_DeviceSensor_List_For_Data(bindSN []string, T_pid int, T_name string,
 				DeviceSensor_unusual = append(DeviceSensor_unusual, v_r)
 			} else if v.T_monitor == 1 && v.T_link == 1 && v_r.T_DeviceSensorParameter.T_free == 0 {
 				DeviceSensor_monitor = append(DeviceSensor_monitor, v_r)
+			} else if v.T_monitor == 1 {
+				DeviceSensor_monitor2 = append(DeviceSensor_monitor2, v_r)
 			} else {
 				DeviceSensor_r = append(DeviceSensor_r, v_r)
 			}
 		}
 		DeviceSensor_unusual = append(DeviceSensor_unusual, DeviceSensor_monitor...)
+		DeviceSensor_unusual = append(DeviceSensor_unusual, DeviceSensor_monitor2...)
 		DeviceSensor_unusual = append(DeviceSensor_unusual, DeviceSensor_r...)
 		return DeviceSensor_unusual[offset:offset_z], cnt
 	}

+ 109 - 12
models/Warning/Warning.go

@@ -42,7 +42,7 @@ type Warning struct {
 	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_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_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天--------|
@@ -82,6 +90,7 @@ type Warning_R struct {
 	T_Ut       string   // 采集时间
 	T_fUt      string   // 首次采集时间
 	T_Text     string   // 处理备注
+	T_handler  string   // 处理人
 	T_Log      []string // 处理日志
 	T_Msid     int64    // 消息ID
 	T_State    int      // 0 删除   1 未处理   2 已处理
@@ -104,6 +113,7 @@ type CompanyWarning_R struct {
 	T_Ut       string   // 采集时间
 	T_fUt      string   // 首次采集时间
 	T_Text     string   // 处理备注
+	T_handler  string   // 处理人
 	T_Log      []string // 处理日志
 	T_Msid     int64    // 消息ID
 	T_State    int      // 0 删除   1 未处理   2 已处理
@@ -125,6 +135,7 @@ type Warning_Applet struct {
 	T_Ut           string   // 采集时间
 	T_fUt          string   // 首次采集时间
 	T_Text         string   // 处理备注
+	T_handler      string   // 处理人
 	T_Log          []string // 处理日志
 	T_Msid         int64    // 消息ID
 	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() {
 		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 {
 		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() {
 		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 {
 		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() {
 		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 {
 		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() {
 		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 {
 		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天内的所有报警数据
-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 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).
 		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 {
-		logs.Error("报警记录信息更新失败", err)
+		logs.Error("查询报警记录信息失败", err)
 		return false
 	}
+
 	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"
 		T_year, T_month := waring.CreateTime.Format("2006"), waring.CreateTime.Format("01")
 		Wtab += "_" + T_year + "_" + T_month
 		waring.T_State = 2
 		waring.UpdateTime = time.Now()
-		waring.T_Text = T_Text
+		waring.T_Text = text
 		backups := Update_Warning_Backups(waring, T_year, T_month)
 		if !backups {
 			err = errors.New("更新报警信息失败")
@@ -1823,6 +1847,79 @@ func BatchHandle(Pid, T_tp int, T_Text, T_uuid string) bool {
 	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 {
 	var warings []Warning
 	var err error