Преглед изворни кода

add:增加预警管理的部分接口

zqbao пре 4 месеци
родитељ
комит
8b31aae945

+ 227 - 1
controllers/edb_monitor/edb_monitor.go

@@ -1,7 +1,233 @@
 package edb_monitor
 
-import "eta/eta_api/controllers"
+import (
+	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/edb_monitor/request"
+	edbmonitor "eta/eta_api/services/edb_monitor"
+	"strings"
+)
 
 type EdbMonitorController struct {
 	controllers.BaseAuthController
 }
+
+// List
+// @Title 预警管理列表
+// @Description 预警管理列表
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   ClassifyId   query   string  true       "分类ID,多选用逗号分隔"
+// @Param   Level   query   string  true       "预警等级,多选用逗号分隔"
+// @Param   UserId   query   string  true       "创建人ID,多选用逗号分隔"
+// @Success 200 {object} response.EdbMonitorInfoListResp
+// @router /list [get]
+func (m *EdbMonitorController) List() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		m.Data["json"] = br
+		m.ServeJSON()
+	}()
+	sysUser := m.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	pageSize, _ := m.GetInt("PageSize")
+	currentIndex, _ := m.GetInt("CurrentIndex")
+	classifyId := m.GetString("ClassifyId")
+	level := m.GetString("Level")
+	state := m.GetString("State")
+	userId := m.GetString("UserId")
+
+	resp, msg, err := edbmonitor.GetMonitorList(classifyId, level, state, userId, pageSize, currentIndex)
+	if err != nil {
+		if msg == "" {
+			msg = "获取列表失败"
+		}
+		br.Msg = msg
+		br.ErrMsg = err.Error()
+		return
+	}
+
+	br.Data = resp
+	br.Msg = "获取列表成功"
+	br.Ret = 200
+	br.Success = true
+}
+
+// Add
+// @Title 预警管理添加
+// @Description 预警管理添加
+// @Param   request body request.EdbMonitorSaveRequest  true  "每页数据条数"
+// @Success 200 {object} models.EnglishReportEmailPageListResp
+// @router /add [post]
+func (m *EdbMonitorController) Add() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		m.Data["json"] = br
+		m.ServeJSON()
+	}()
+	sysUser := m.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.EdbMonitorInfoSaveReq
+	if err := json.Unmarshal(m.Ctx.Input.RequestBody, &req); err != nil {
+		br.Msg = "参数解析失败"
+		br.ErrMsg = err.Error()
+		return
+	}
+
+	if req.ClassifyId <= 0 {
+		br.Msg = "请选择分类"
+		return
+	}
+	switch req.MonitorType {
+	case edbmonitor.EDB_MONITOR_TYPE_DOWN, edbmonitor.EDB_MONITOR_TYPE_UP:
+	default:
+		br.Msg = "请选择预警等级"
+		return
+	}
+	req.MonitorData = strings.TrimSpace(req.MonitorData)
+	if req.MonitorData == "" {
+		br.Msg = "请输入预警值"
+		return
+	}
+	req.EdbMonitorName = strings.TrimSpace(req.EdbMonitorName)
+	if req.EdbMonitorName == "" {
+		br.Msg = "请输入预警名称"
+		return
+	}
+
+	msg, err := edbmonitor.EdbMonitorInfoSave(req, sysUser.AdminId)
+	if err != nil {
+		if msg == "" {
+			msg = "添加失败"
+		}
+		br.Msg = msg
+		br.ErrMsg = err.Error()
+		return
+	}
+
+	br.Msg = "添加成功"
+	br.Ret = 200
+	br.Success = true
+}
+
+// edit
+// @Title 预警管理编辑
+// @Description 预警管理编辑
+// @Param   request body request.EdbMonitorSaveRequest  true  "每页数据条数"
+// @Success 200 {object} models.EnglishReportEmailPageListResp
+// @router /edit [post]
+func (m *EdbMonitorController) Edit() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		m.Data["json"] = br
+		m.ServeJSON()
+	}()
+	sysUser := m.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.EdbMonitorInfoSaveReq
+	if err := json.Unmarshal(m.Ctx.Input.RequestBody, &req); err != nil {
+		br.Msg = "参数解析失败"
+		br.ErrMsg = err.Error()
+		return
+	}
+	if req.EdbMonitorId <= 0 {
+		br.Msg = "请选择指标"
+		return
+	}
+	if req.ClassifyId <= 0 {
+		br.Msg = "请选择分类"
+		return
+	}
+	switch req.MonitorType {
+	case edbmonitor.EDB_MONITOR_TYPE_DOWN, edbmonitor.EDB_MONITOR_TYPE_UP:
+	default:
+		br.Msg = "请选择预警等级"
+		return
+	}
+	req.MonitorData = strings.TrimSpace(req.MonitorData)
+	if req.MonitorData == "" {
+		br.Msg = "请输入预警值"
+		return
+	}
+	req.EdbMonitorName = strings.TrimSpace(req.EdbMonitorName)
+	if req.EdbMonitorName == "" {
+		br.Msg = "请输入预警名称"
+		return
+	}
+
+	msg, err := edbmonitor.EdbMonitorInfoSave(req, sysUser.AdminId)
+	if err != nil {
+		if msg == "" {
+			msg = "编辑失败"
+		}
+		br.Msg = msg
+		br.ErrMsg = err.Error()
+		return
+	}
+
+	br.Msg = "编辑成功"
+	br.Ret = 200
+	br.Success = true
+}
+
+// delete
+// @Title 预警管理编辑
+// @Description 预警管理编辑
+// @Param   request body request.EdbMonitorSaveRequest  true  "每页数据条数"
+// @Success 200 {object} models.EnglishReportEmailPageListResp
+// @router /delete [post]
+func (m *EdbMonitorController) Delete() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		m.Data["json"] = br
+		m.ServeJSON()
+	}()
+	sysUser := m.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req request.EdbMonitorInfoDeleteReq
+	if err := json.Unmarshal(m.Ctx.Input.RequestBody, &req); err != nil {
+		br.Msg = "参数解析失败"
+		br.ErrMsg = err.Error()
+		return
+	}
+	if req.EdbMonitorId <= 0 {
+		br.Msg = "请选择指标"
+		return
+	}
+
+	msg, err := edbmonitor.EdbMonitorInfoDelete(req)
+	if err != nil {
+		if msg == "" {
+			msg = "删除失败"
+		}
+		br.Msg = msg
+		br.ErrMsg = err.Error()
+		return
+	}
+
+	br.Msg = "删除成功"
+	br.Ret = 200
+	br.Success = true
+}

+ 79 - 0
controllers/edb_monitor/edb_monitor_classify.go

@@ -0,0 +1,79 @@
+package edb_monitor
+
+import (
+	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/edb_monitor/request"
+	edbmonitor "eta/eta_api/services/edb_monitor"
+)
+
+type EdbMonitorClassify struct {
+	controllers.BaseAuthController
+}
+
+// List
+// @Title 预警管理分类列表
+// @Description 预警管理分类列表
+// @Success 200 {object} response.EdbMonitorClassifyTree
+// @router /list [get]
+func (c *EdbMonitorClassify) List() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+	sysUser := c.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	resp, msg, err := edbmonitor.GetEdbMonitorClassifyTree()
+	if err != nil {
+		if msg == "" {
+			msg = "获取分类列表失败"
+		}
+		br.Msg = msg
+		br.ErrMsg = err.Error()
+		return
+	}
+
+	br.Data = resp
+	br.Msg = "获取成功"
+	br.Ret = 200
+	br.Success = true
+}
+
+// Add
+// @Title 预警管理分类添加
+// @Description 预警管理分类添加
+// @Param   request body request.EdbMonitorSaveRequest  true  "每页数据条数"
+// @Success 200 {object} models.EnglishReportEmailPageListResp
+// @router /classify/add [post]
+func (c *EdbMonitorClassify) Add() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+	sysUser := c.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	var req request.EdbMonitorClassifySaveReq
+	if err := json.Unmarshal(c.Ctx.Input.RequestBody, &req); err != nil {
+		br.Msg = "参数解析失败"
+		br.ErrMsg = err.Error()
+		return
+	}
+
+	br.Msg = "分类添加成功"
+	br.Ret = 200
+	br.Success = true
+}

+ 78 - 0
models/edb_monitor/edb_monitor.go

@@ -0,0 +1,78 @@
+package edbmonitor
+
+import (
+	"time"
+
+	"github.com/beego/beego/v2/client/orm"
+)
+
+type EdbMonitorInfo struct {
+	EdbMonitorId         int       `orm:"column(edb_monitor_id);pk"`
+	EdbMonitorClassifyId int       `description:"预警分类id"`
+	EdbMonitorName       string    `description:"预警名称"`
+	EdbInfoId            int       `description:"指标id"`
+	EdbInfoType          int       `description:"指标类型"`
+	EdbCode              string    `description:"指标编码"`
+	Source               int       `description:"指标来源"`
+	SubSource            int       `description:"指标子来源: 0-经济数据库;1-日期序列;2-高频数据"`
+	EdbLatestDate        string    `description:"最新日期"`
+	EdbLatestValue       float64   `description:"指标最新值"`
+	MonitorType          int       `description:"突破方式: 0-向上突破;1-向下突破"`
+	MonitorData          float64   `description:"预警值"`
+	MonitorLevel         string    `description:"预警等级"`
+	State                int       `description:"预警状态: 0-已关闭;1-未触发;2-已触发"`
+	EdbTriggerDate       string    `description:"触发日期"`
+	MonitorTriggerTime   time.Time `description:"预警触发时间"`
+	CreateUserId         int       `description:"创建人id"`
+	CreateTime           time.Time `description:"创建时间"`
+	ModifyTime           time.Time `description:"修改时间"`
+}
+
+func (m *EdbMonitorInfo) Insert() (int64, error) {
+	o := orm.NewOrmUsingDB("data")
+	return o.Insert(m)
+}
+
+func (m *EdbMonitorInfo) Update(cols []string) (err error) {
+	if len(cols) == 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Update(m, cols...)
+	return
+}
+
+func DeleteEdbMonitorInfoById(id int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `DELETE FROM edb_monitor_info WHERE edb_monitor_id =?`
+	_, err = o.Raw(sql, id).Exec()
+	return
+}
+
+func GetEdbMonitorInfoById(id int) (item *EdbMonitorInfo, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM edb_monitor_info WHERE edb_monitor_id =?`
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+func GetEdbMonitorInfoCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT COUNT(*) AS count FROM edb_monitor_info WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
+func GetEdbMonitorInfoPageByCondition(condition string, pars []interface{}, startSize int, pageSize int) (items []*EdbMonitorInfo, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM edb_monitor_info WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY create_time DESC LIMIT?,?`
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}

+ 24 - 0
models/edb_monitor/edb_monitor_classify.go

@@ -0,0 +1,24 @@
+package edbmonitor
+
+import (
+	"time"
+
+	"github.com/beego/beego/v2/client/orm"
+)
+
+type EdbMonitorClassify struct {
+	ClassifyId   int       `orm:"column(classify_id);pk"`
+	ClassifyName string    `description:"分类名称"`
+	Level        int       `description:"分类层级"`
+	ParentId     int       `description:"父分类ID"`
+	RootId       int       `description:"根分类ID"`
+	Sort         int       `description:"排序"`
+	CreateTime   time.Time `description:"创建时间"`
+}
+
+func GetEdbMonitorClassifyList() (items []*EdbMonitorClassify, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := "SELECT * FROM edb_monitor_classify"
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 15 - 0
models/edb_monitor/request/edb_monitor.go

@@ -0,0 +1,15 @@
+package request
+
+type EdbMonitorInfoSaveReq struct {
+	EdbMonitorId   int    `description:"预警ID"`
+	EdbInfoId      int    `description:"指标ID"`
+	MonitorType    int    `description:"突破方式:0-向上突破;1-向下突破"`
+	MonitorData    string `description:"预警值"`
+	EdbMonitorName string `description:"预警名称"`
+	MonitorLevel   string `description:"预警级别"`
+	ClassifyId     int    `description:"预警分类"`
+}
+
+type EdbMonitorInfoDeleteReq struct {
+	EdbMonitorId int `description:"预警ID"`
+}

+ 8 - 0
models/edb_monitor/request/edb_monitor_classify.go

@@ -0,0 +1,8 @@
+package request
+
+type EdbMonitorClassifySaveReq struct {
+	ClassifyId   int
+	ClassifyName string
+	ParentId     int
+	RootId       int
+}

+ 32 - 0
models/edb_monitor/response/edb_monitor.go

@@ -0,0 +1,32 @@
+package response
+
+import "github.com/rdlucklib/rdluck_tools/paging"
+
+type EdbMonitorInfoItem struct {
+	EdbMonitorId           int     `orm:"column(edb_monitor_id);pk"`
+	EdbMonitorClassifyId   int     `description:"预警分类id" json:"-"`
+	EdbMonitorClassifyName string  `description:"预警分类名称"`
+	EdbMonitorName         string  `description:"预警名称"`
+	EdbInfoId              int     `description:"指标id"`
+	EdbInfoType            int     `description:"指标类型"`
+	EdbCode                string  `description:"指标编码"`
+	Source                 int     `description:"指标来源" json:"-"`
+	SubSource              int     `description:"指标子来源: 0-经济数据库;1-日期序列;2-高频数据" json:"-"`
+	EdbLatestDate          string  `description:"最新日期"`
+	EdbLatestValue         float64 `description:"最新值"`
+	MonitorType            int     `description:"突破方式: 0-向上突破;1-向下突破"`
+	MonitorData            float64 `description:"预警值"`
+	MonitorLevel           string  `description:"预警等级"`
+	State                  int     `description:"预警状态: 0-已关闭;1-未触发;2-已触发"`
+	EdbTriggerDate         string  `description:"触发日期"`
+	MonitorTriggerTime     string  `description:"预警触发时间"`
+	CreateUserId           int     `description:"创建人id"`
+	CreateUserName         string  `description:"创建人姓名"`
+	CreateTime             string  `description:"创建时间" json:"-"`
+	ModifyTime             string  `description:"修改时间" json:"-"`
+}
+
+type EdbMonitorInfoListResp struct {
+	List   []*EdbMonitorInfoItem `description:"预警列表"`
+	Paging *paging.PagingItem    `description:"分页信息"`
+}

+ 8 - 0
models/edb_monitor/response/edb_monitor_classify.go

@@ -0,0 +1,8 @@
+package response
+
+type EdbMonitorClassifyTree struct {
+	ClassifyId   int                       `description:"分类id"`
+	ClassifyName string                    `description:"分类名称"`
+	Level        int                       `description:"分类层级"`
+	Children     []*EdbMonitorClassifyTree `description:"子分类"`
+}

+ 6 - 0
routers/router.go

@@ -23,6 +23,7 @@ import (
 	"eta/eta_api/controllers/data_source"
 	"eta/eta_api/controllers/data_stat"
 	"eta/eta_api/controllers/document_manage"
+	"eta/eta_api/controllers/edb_monitor"
 	"eta/eta_api/controllers/english_report"
 	"eta/eta_api/controllers/eta_trial"
 	"eta/eta_api/controllers/fe_calendar"
@@ -397,6 +398,11 @@ func init() {
 				&document_manage.DocumentManageController{},
 			),
 		),
+		web.NSNamespace("/edb_monitor",
+			web.NSInclude(
+				&edb_monitor.EdbMonitorController{},
+			),
+		),
 	)
 	web.AddNamespace(ns)
 }

+ 0 - 1
services/binlog/binlog.go

@@ -82,7 +82,6 @@ func ListenMysql() {
 
 		if binlogFormat.Value != "ROW" {
 			panic("mysql binlog format is not ROW")
-			return
 		}
 	}
 

+ 342 - 0
services/edb_monitor/edb_monitor.go

@@ -0,0 +1,342 @@
+package edbmonitor
+
+import (
+	"eta/eta_api/models/data_manage"
+	edbmonitor "eta/eta_api/models/edb_monitor"
+	"eta/eta_api/models/edb_monitor/request"
+	"eta/eta_api/models/edb_monitor/response"
+	"eta/eta_api/models/system"
+	"eta/eta_api/utils"
+	"fmt"
+	"strconv"
+	"strings"
+	"time"
+
+	"github.com/rdlucklib/rdluck_tools/paging"
+)
+
+// 预警触发状态
+const (
+	EDB_MONITOR_STATE_CLOSE = iota
+	EDB_MONITOR_STATE_NO_TRIGGER
+	EDB_MONITOR_STATE_TRIGGER_SUCCESS
+)
+
+// 预警突破方式
+const (
+	EDB_MONITOR_TYPE_UP = iota
+	EDB_MONITOR_TYPE_DOWN
+)
+
+func GetMonitorList(classifyId, level, state, userId string, pageSize, currentIndex int) (resp response.EdbMonitorInfoListResp, msg string, err error) {
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize := utils.StartIndex(currentIndex, pageSize)
+
+	var classifyIdList []int
+	if classifyId != "" {
+		tmp := strings.Split(classifyId, ",")
+		for _, v := range tmp {
+			cv, _ := strconv.Atoi(v)
+			classifyIdList = append(classifyIdList, cv)
+		}
+	}
+	var levelList []int
+	if level != "" {
+		tmp := strings.Split(level, ",")
+		for _, v := range tmp {
+			lv, _ := strconv.Atoi(v)
+			levelList = append(levelList, lv)
+		}
+	}
+	var stateList []int
+	if state != "" {
+		tmp := strings.Split(state, ",")
+		for _, v := range tmp {
+			st, _ := strconv.Atoi(v)
+			stateList = append(stateList, st)
+		}
+	}
+	var userIdList []int
+	if userId != "" {
+		tmp := strings.Split(userId, ",")
+		for _, v := range tmp {
+			ui, _ := strconv.Atoi(v)
+			userIdList = append(userIdList, ui)
+		}
+	}
+
+	var conditon string
+	var pars []interface{}
+	if len(classifyIdList) != 0 {
+		conditon += ` AND edb_monitor_classify_id IN (` + utils.GetOrmInReplace(len(classifyIdList)) + ` )`
+		pars = append(pars, classifyIdList)
+	}
+	if len(levelList) != 0 {
+		conditon += ` AND monitor_level IN (` + utils.GetOrmInReplace(len(levelList)) + ` )`
+		pars = append(pars, levelList)
+	}
+	if len(stateList) != 0 {
+		conditon += ` AND state IN (` + utils.GetOrmInReplace(len(stateList)) + ` )`
+		pars = append(pars, stateList)
+	}
+	if len(userIdList) != 0 {
+		conditon += ` AND create_user_id IN (` + utils.GetOrmInReplace(len(userIdList)) + ` )`
+		pars = append(pars, userIdList)
+	}
+
+	total, err := edbmonitor.GetEdbMonitorInfoCountByCondition(conditon, pars)
+	if err != nil {
+		msg = "获取监控列表失败"
+		err = fmt.Errorf("GetEdbMonitorInfoCountByCondition err:%w", err)
+		return
+	}
+
+	edbMonitorList, err := edbmonitor.GetEdbMonitorInfoPageByCondition(conditon, pars, startSize, pageSize)
+	if err != nil {
+		msg = "获取监控列表失败"
+		err = fmt.Errorf("GetEdbMonitorInfoPageByCondition err:%w", err)
+		return
+	}
+	edbUserId := make([]int, 0)
+	for _, v := range edbMonitorList {
+		edbUserId = append(edbUserId, v.CreateUserId)
+	}
+	userInfoList, err := system.GetSysAdminByIdList(edbUserId)
+	if err != nil {
+		msg = "获取监控列表失败"
+		err = fmt.Errorf("GetSysAdminByIdList err:%w", err)
+		return
+	}
+	userMap := make(map[int]string)
+	for _, v := range userInfoList {
+		userMap[v.AdminId] = v.RealName
+	}
+	classifyList, err := edbmonitor.GetEdbMonitorClassifyList()
+	if err != nil {
+		msg = "获取监控列表失败"
+		err = fmt.Errorf("GetEdbMonitorClassifyList err:%w", err)
+		return
+	}
+	classifyMap := make(map[int]string)
+	for _, v := range classifyList {
+		classifyMap[v.ClassifyId] = v.ClassifyName
+	}
+	classifyPathMap := make(map[int]string)
+	for _, v := range classifyList {
+		var path []string
+		if v.ParentId != 0 {
+			parentName := classifyMap[v.ParentId]
+			if v.RootId != 0 && v.RootId != v.ParentId {
+				rootName := classifyMap[v.RootId]
+				path = append(path, rootName)
+			}
+			curName := v.ClassifyName
+			path = append(path, parentName, curName)
+		} else {
+			path = append(path, v.ClassifyName)
+		}
+		classifyPathMap[v.ClassifyId] = strings.Join(path, "/")
+	}
+
+	edbMonitorItems := toEdbMonitorInfoItems(edbMonitorList, userMap, classifyPathMap)
+	page := paging.GetPaging(currentIndex, pageSize, total)
+
+	resp.List = edbMonitorItems
+	resp.Paging = page
+
+	return
+}
+
+func EdbMonitorInfoSave(req request.EdbMonitorInfoSaveReq, adminId int) (msg string, err error) {
+	edb, er := data_manage.GetEdbInfoById(req.EdbInfoId)
+	if er != nil {
+		if er.Error() == utils.ErrNoRow() {
+			msg = "指标不存在,请刷新重试"
+			err = er
+			return
+		}
+		msg = "添加指标预警失败"
+		err = er
+		return
+	}
+	var edbMonitorInfo *edbmonitor.EdbMonitorInfo
+	if req.EdbMonitorId > 0 {
+		edbMonitorInfo, er = edbmonitor.GetEdbMonitorInfoById(req.EdbMonitorId)
+		if er != nil {
+			if er.Error() == utils.ErrNoRow() {
+				msg = "指标预警不存在,请刷新重试"
+				err = er
+				return
+			}
+			msg = "编辑指标预警失败"
+			err = fmt.Errorf("GetEdbMonitorInfoById err:%w", er)
+			return
+		}
+		var updateCols []string
+		if edbMonitorInfo.EdbInfoId != req.EdbInfoId {
+			updateCols = append(updateCols, []string{"edb_info_id", "edb_info_type", "edb_code", "source", "sub_source", "edb_latest_date", "edb_latest_value"}...)
+			edbMonitorInfo.EdbInfoId = req.EdbInfoId
+			edbMonitorInfo.EdbInfoType = edb.EdbInfoType
+			edbMonitorInfo.EdbCode = edb.EdbCode
+			edbMonitorInfo.Source = edb.Source
+			edbMonitorInfo.SubSource = edb.SubSource
+			edbMonitorInfo.EdbLatestDate = edb.LatestDate
+			edbMonitorInfo.EdbLatestValue = edb.LatestValue
+		}
+		if edbMonitorInfo.EdbMonitorName != req.EdbMonitorName {
+			updateCols = append(updateCols, "edb_monitor_name")
+			edbMonitorInfo.EdbMonitorName = req.EdbMonitorName
+		}
+		if edbMonitorInfo.EdbMonitorClassifyId != req.ClassifyId {
+			updateCols = append(updateCols, "edb_monitor_classify_id")
+			edbMonitorInfo.EdbMonitorClassifyId = req.ClassifyId
+		}
+		if edbMonitorInfo.MonitorType != req.MonitorType {
+			updateCols = append(updateCols, "monitor_type")
+			edbMonitorInfo.MonitorType = req.MonitorType
+		}
+		monitorData, _ := strconv.ParseFloat(req.MonitorData, 64)
+		if edbMonitorInfo.MonitorData != monitorData {
+			updateCols = append(updateCols, "monitor_data")
+			edbMonitorInfo.MonitorData = monitorData
+		}
+		if edbMonitorInfo.MonitorLevel != req.MonitorLevel {
+			updateCols = append(updateCols, "monitor_level")
+			edbMonitorInfo.MonitorLevel = req.MonitorLevel
+		}
+		if len(updateCols) > 0 {
+			updateCols = append(updateCols, "modify_time")
+			edbMonitorInfo.ModifyTime = time.Now()
+			er := edbMonitorInfo.Update(updateCols)
+			if er != nil {
+				msg = "编辑指标预警失败"
+				err = fmt.Errorf("UpdateEdbMonitorInfoById err:%w", er)
+				return
+			}
+		}
+	} else {
+		edbMonitorInfo = new(edbmonitor.EdbMonitorInfo)
+		edbMonitorInfo.EdbMonitorClassifyId = req.ClassifyId
+		edbMonitorInfo.EdbMonitorName = req.EdbMonitorName
+		edbMonitorInfo.EdbInfoId = req.EdbInfoId
+		edbMonitorInfo.EdbInfoType = edb.EdbInfoType
+		edbMonitorInfo.EdbCode = edb.EdbCode
+		edbMonitorInfo.Source = edb.Source
+		edbMonitorInfo.SubSource = edb.SubSource
+		edbMonitorInfo.EdbLatestDate = edb.LatestDate
+		edbMonitorInfo.EdbLatestValue = edb.LatestValue
+		edbMonitorInfo.MonitorType = req.MonitorType
+		monitorData, _ := strconv.ParseFloat(req.MonitorData, 64)
+		edbMonitorInfo.MonitorData = monitorData
+		edbMonitorInfo.MonitorLevel = req.MonitorLevel
+		edbMonitorInfo.CreateUserId = adminId
+		edbMonitorInfo.CreateTime = time.Now()
+		edbMonitorInfo.ModifyTime = time.Now()
+
+		insertId, er := edbMonitorInfo.Insert()
+		if er != nil {
+			msg = "添加指标预警失败"
+			err = fmt.Errorf("insert err:%w", er)
+			return
+		}
+		edbMonitorInfo.EdbMonitorId = int(insertId)
+	}
+	err = ModifyEdbMonitorState(edbMonitorInfo, edb.EdbCode, edb.Source, edb.SubSource)
+	if err != nil {
+		msg = "更新指标预警失败"
+		err = fmt.Errorf("ModifyEdbMonitorState err:%w", err)
+		return
+	}
+	return
+}
+
+func ModifyEdbMonitorState(edbMonitorInfo *edbmonitor.EdbMonitorInfo, edbCode string, source, subSource int) (err error) {
+	cond := ` AND edb_code = ? `
+	pars := []interface{}{edbCode}
+	latestTwoData, er := data_manage.GetEdbDataListByCondition(cond, pars, source, subSource, 0, 2)
+	if er != nil {
+		err = fmt.Errorf("GetEdbDataListByCondition err:%w", er)
+		return
+	}
+	triggerState := cmpEdbMonitorState(latestTwoData, edbMonitorInfo.MonitorType, edbMonitorInfo.MonitorData)
+	var updateCols []string
+	if edbMonitorInfo.State != EDB_MONITOR_STATE_TRIGGER_SUCCESS {
+		edbMonitorInfo.State = triggerState
+		updateCols = append(updateCols, "state")
+	} else {
+		edbMonitorInfo.EdbTriggerDate = latestTwoData[0].DataTime
+		edbMonitorInfo.MonitorTriggerTime = time.Now()
+		updateCols = append(updateCols, []string{"edb_trigger_date", "monitor_trigger_time"}...)
+	}
+	err = edbMonitorInfo.Update(updateCols)
+	if err != nil {
+		return
+	}
+	return
+}
+
+func cmpEdbMonitorState(twoData []*data_manage.EdbData, monitorType int, monitorData float64) int {
+	if len(twoData) < 2 {
+		return EDB_MONITOR_STATE_NO_TRIGGER
+	}
+	switch monitorType {
+	case EDB_MONITOR_TYPE_UP:
+		if twoData[0].Value >= monitorData && twoData[1].Value < monitorData {
+			return EDB_MONITOR_STATE_TRIGGER_SUCCESS
+		} else {
+			return EDB_MONITOR_STATE_NO_TRIGGER
+		}
+	case EDB_MONITOR_TYPE_DOWN:
+		if twoData[0].Value <= monitorData && twoData[1].Value > monitorData {
+			return EDB_MONITOR_STATE_TRIGGER_SUCCESS
+		} else {
+			return EDB_MONITOR_STATE_NO_TRIGGER
+		}
+	default:
+		return EDB_MONITOR_STATE_NO_TRIGGER
+	}
+}
+
+func EdbMonitorInfoDelete(req request.EdbMonitorInfoDeleteReq) (msg string, err error) {
+	err = edbmonitor.DeleteEdbMonitorInfoById(req.EdbMonitorId)
+	if err != nil {
+		msg = "删除失败"
+		err = fmt.Errorf("DeleteEdbMonitorInfoById err:%w", err)
+	}
+	return
+}
+
+func toEdbMonitorInfoItems(edbmonitor []*edbmonitor.EdbMonitorInfo, userMap map[int]string, classifyPathMap map[int]string) []*response.EdbMonitorInfoItem {
+	res := make([]*response.EdbMonitorInfoItem, len(edbmonitor))
+	for _, v := range edbmonitor {
+		tmp := new(response.EdbMonitorInfoItem)
+		tmp.EdbMonitorId = v.EdbMonitorId
+		tmp.EdbMonitorName = v.EdbMonitorName
+		tmp.EdbMonitorClassifyId = v.EdbMonitorClassifyId
+		tmp.EdbMonitorClassifyName = classifyPathMap[v.EdbMonitorClassifyId]
+		tmp.EdbInfoId = v.EdbInfoId
+		tmp.EdbInfoType = v.EdbInfoType
+		tmp.EdbCode = v.EdbCode
+		tmp.Source = v.Source
+		tmp.SubSource = v.SubSource
+		tmp.EdbLatestDate = v.EdbLatestDate
+		tmp.EdbLatestValue = v.EdbLatestValue
+		tmp.MonitorType = v.MonitorType
+		tmp.MonitorData = v.MonitorData
+		tmp.MonitorLevel = v.MonitorLevel
+		tmp.State = v.State
+		tmp.EdbTriggerDate = v.EdbTriggerDate
+		tmp.MonitorTriggerTime = utils.TimeTransferString(utils.FormatDateTime, v.MonitorTriggerTime)
+		tmp.CreateUserId = v.CreateUserId
+		tmp.CreateUserName = userMap[v.CreateUserId]
+		tmp.CreateTime = utils.TimeTransferString(utils.FormatDateTime, v.CreateTime)
+		tmp.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, v.ModifyTime)
+		res = append(res, tmp)
+	}
+	return res
+}

+ 31 - 0
services/edb_monitor/edb_monitor_classify.go

@@ -0,0 +1,31 @@
+package edbmonitor
+
+import (
+	edbmonitor "eta/eta_api/models/edb_monitor"
+	"eta/eta_api/models/edb_monitor/response"
+)
+
+func GetEdbMonitorClassifyTree() (resp []*response.EdbMonitorClassifyTree, msg string, err error) {
+	classifyList, err := edbmonitor.GetEdbMonitorClassifyList()
+	if err != nil {
+		msg = "获取分类列表失败"
+		return
+	}
+	resp = generateClassifyTree(classifyList, 0)
+	return
+}
+
+func generateClassifyTree(classifyList []*edbmonitor.EdbMonitorClassify, parentId int) []*response.EdbMonitorClassifyTree {
+	res := make([]*response.EdbMonitorClassifyTree, 0)
+	for _, v := range classifyList {
+		if v.ParentId == parentId {
+			tmp := new(response.EdbMonitorClassifyTree)
+			tmp.ClassifyId = v.ClassifyId
+			tmp.ClassifyName = v.ClassifyName
+			tmp.Level = v.Level
+			tmp.Children = generateClassifyTree(classifyList, v.ClassifyId)
+			res = append(res, tmp)
+		}
+	}
+	return res
+}