package api import ( "easyvqd/internal/conf" "easyvqd/internal/core/host" "easyvqd/internal/core/media" "easyvqd/internal/core/vqd" "easyvqd/internal/core/vqdtask" "fmt" "git.lnton.com/lnton/pkg/reason" "github.com/gin-gonic/gin" "github.com/ixugo/goddd/pkg/web" "strconv" ) type VqdTaskAPI struct { core *vqd.Core meidaCore *media.Core vqdSdkCore *vqdtask.Core cfg *conf.Bootstrap HostCore *host.Core } func NewVqdTaskAPI(core *vqd.Core, meidaCore *media.Core, vqdSdkCore *vqdtask.Core, HostCore *host.Core, cfg *conf.Bootstrap) VqdTaskAPI { return VqdTaskAPI{core: core, meidaCore: meidaCore, vqdSdkCore: vqdSdkCore, HostCore: HostCore, cfg: cfg} } func RegisterVqdTask(g gin.IRouter, api VqdTaskAPI, handler ...gin.HandlerFunc) { { groupTask := g.Group("/api/task", handler...) groupTask.GET("", web.WarpH(api.findVqdTask)) groupTask.GET("/:id", web.WarpH(api.getVqdTask)) groupTask.PUT("/:id", web.WarpH(api.editVqdTask)) groupTask.POST("", web.WarpH(api.addVqdTask)) groupTask.DELETE("/:id", web.WarpH(api.delVqdTask)) groupTemplate := g.Group("/api/template", handler...) groupTemplate.GET("", web.WarpH(api.findVqdTaskTemplate)) groupTemplate.GET("/:id", web.WarpH(api.getVqdTaskTemplate)) groupTemplate.PUT("/:id", web.WarpH(api.editVqdTaskTemplate)) groupTemplate.POST("", web.WarpH(api.addVqdTaskTemplate)) groupTemplate.DELETE("/:id", web.WarpH(api.delVqdTaskTemplate)) groupTime := g.Group("/api/plan", handler...) groupTime.GET("", web.WarpH(api.findVqdTimeTemplate)) groupTime.GET("/:id", web.WarpH(api.getVqdTimeTemplate)) groupTime.PUT("/:id", web.WarpH(api.editVqdTimeTemplate)) groupTime.POST("", web.WarpH(api.addVqdTimeTemplate)) groupTime.DELETE("/:id", web.WarpH(api.delVqdTimeTemplate)) groupAlarm := g.Group("/api/alarm", handler...) groupAlarm.GET("", web.WarpH(api.findVqdAlarm)) groupAlarm.GET("/:id", web.WarpH(api.getVqdAlarm)) groupAlarm.DELETE("/:id", web.WarpH(api.delVqdAlarm)) groupAlarm.DELETE("", web.WarpH(api.delVqdAlarmAll)) } } func (a VqdTaskAPI) findVqdTask(c *gin.Context, in *vqd.FindVqdTaskInput) (any, error) { items, total, err := a.core.FindVqdTask(c.Request.Context(), in) rows := make([]map[string]interface{}, 0) for _, item := range items { //row := structs.Map(item) row := make(map[string]interface{}) row["name"] = item.Name row["id"] = item.ID row["enable"] = item.Enable row["channel_id"] = item.ChannelID row["channel_name"] = item.ChannelName row["task_template_id"] = item.TaskTemplateID row["time_template_id"] = item.TimeTemplateID row["task_template_name"] = "" row["time_template_name"] = "" template, errs := a.core.GetIDVqdTaskTemplate(c.Request.Context(), item.TaskTemplateID) if errs == nil && template != nil { row["task_template_name"] = template.Name } timeTemplate, errs := a.core.GetIDVqdTimeTemplate(c.Request.Context(), item.TimeTemplateID) if errs == nil && template != nil { row["time_template_name"] = timeTemplate.Name } row["error_msg"] = "" row["status"] = 0 v, ok := vqdtask.VqdTaskMap.LoadTaskMap(item.ChannelID) if ok { row["error_msg"] = v.ErrorMsg row["status"] = v.Status } row["created_at"] = item.CreatedAt row["updated_at"] = item.UpdatedAt rows = append(rows, row) } return gin.H{"items": rows, "total": total}, err } func (a VqdTaskAPI) getVqdTask(c *gin.Context, _ *struct{}) (any, error) { ID, _ := strconv.Atoi(c.Param("id")) item, err := a.core.GetVqdTask(c.Request.Context(), ID) if err != nil { return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`find vqdcms [%d] err [%s]`, ID, err.Error())) } row := make(map[string]interface{}) row["name"] = item.Name row["id"] = item.ID row["enable"] = item.Enable row["channel_id"] = item.ChannelID row["channel_name"] = item.ChannelName row["task_template_id"] = item.TaskTemplateID row["time_template_id"] = item.TimeTemplateID row["task_template_name"] = "" row["time_template_name"] = "" template, errs := a.core.GetIDVqdTaskTemplate(c.Request.Context(), item.TaskTemplateID) if errs == nil && template != nil { row["task_template_name"] = template.Name } timeTemplate, errs := a.core.GetIDVqdTimeTemplate(c.Request.Context(), item.TimeTemplateID) if errs == nil && template != nil { row["time_template_name"] = timeTemplate.Name } row["error_msg"] = "" row["status"] = 0 v, ok := vqdtask.VqdTaskMap.LoadTaskMap(item.ChannelID) if ok { row["error_msg"] = v.ErrorMsg row["status"] = v.Status } row["created_at"] = item.CreatedAt row["updated_at"] = item.UpdatedAt row["des"] = item.Des return gin.H{"data": row}, err } func (a VqdTaskAPI) addVqdTask(c *gin.Context, in *vqd.AddVqdTaskInput) (any, error) { taskChn, err := a.core.GetNameVqdTaskChannelID(c.Request.Context(), in.ChannelID) if err == nil && taskChn != nil { return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`通道任务已存在 [%s] `, taskChn.ChannelID)) } task, err := a.core.AddVqdTask(c.Request.Context(), in) if err != nil { return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`add vqdcms err [%s]`, err.Error())) } err = a.vqdSdkCore.AddTaskVqd(task.ID) if err != nil { return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`add task err [%s]`, err.Error())) } return gin.H{"data": "OK!"}, err } func (a VqdTaskAPI) editVqdTask(c *gin.Context, in *vqd.EditVqdTaskInput) (any, error) { ID, _ := strconv.Atoi(c.Param("id")) task, err := a.core.GetVqdTask(c.Request.Context(), ID) if err != nil { return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`find vqdcms [%d] err [%s]`, ID, err.Error())) } if task.ChannelID != in.ChannelID { taskChn, errs := a.core.GetNameVqdTaskChannelID(c.Request.Context(), in.ChannelID) if errs == nil && taskChn != nil { return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`通道任务已存在 [%s] `, taskChn.ChannelID)) } } info, err := a.core.EditVqdTask(c.Request.Context(), in, ID) if err != nil { return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`edit vqdcms err [%s]`, err.Error())) } if task.Enable == false && in.Enable { err = a.vqdSdkCore.AddTaskVqd(task.ID) if err != nil { return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`add task err [%s]`, err.Error())) } } else { if info.Enable { err = a.vqdSdkCore.UpdateTaskVqd(ID) if err != nil { return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`update task err [%s]`, err.Error())) } } else { a.vqdSdkCore.DelTaskVqd(ID, info.ChannelID) } } return gin.H{"data": "OK!"}, err } func (a VqdTaskAPI) delVqdTask(c *gin.Context, _ *struct{}) (any, error) { ID, _ := strconv.Atoi(c.Param("id")) task, err := a.core.DelVqdTask(c.Request.Context(), ID) if err != nil { return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`del vqdcms [%d] err [%s]`, ID, err.Error())) } a.vqdSdkCore.DelTaskVqd(ID, task.ChannelID) return gin.H{"data": "OK!"}, err }