package incident import ( "strconv" "github.com/gin-gonic/gin" "wails-app/internal/model/common/response" "wails-app/internal/modules/incident/repository" "wails-app/internal/modules/incident/service" utils "wails-app/internal/pkg" ) var incidentSvc = service.NewIncidentService() // adminAuthorityId 管理员角色(888);处置权限见初始化种子中的 Casbin 规则。 const adminAuthorityId = "888" // ListIncidents 分页筛选异常记录。 func ListIncidents(c *gin.Context) { var q repository.IncidentListQuery if err := c.ShouldBindQuery(&q); err != nil { response.FailWithMessage(err.Error(), c) return } list, total, err := incidentSvc.ListIncidents(q) if err != nil { response.FailWithMessage(err.Error(), c) return } response.OkWithDetailed(response.PageResult{List: list, Total: total, Page: q.Page, PageSize: q.PageSize}, "查询成功", c) } // GetIncident 异常详情。 func GetIncident(c *gin.Context) { id, err := strconv.ParseUint(c.Param("id"), 10, 64) if err != nil { response.FailWithMessage("异常记录 ID 无效", c) return } record, err := incidentSvc.GetIncident(uint(id)) if err != nil { response.FailWithMessage(service.ErrIncidentNotFound.Error(), c) return } response.OkWithData(record, c) } // CreateIncident 人工上报异常。 func CreateIncident(c *gin.Context) { var req service.CreateIncidentRequest if err := c.ShouldBindJSON(&req); err != nil { response.FailWithMessage(err.Error(), c) return } record, err := incidentSvc.CreateIncident(req, utils.GetUserID(c)) if err != nil { response.FailWithMessage(err.Error(), c) return } response.OkWithData(record, c) } // TransitionIncident 状态流转+处置。强制免费等资金类处置仅管理员(888)可执行。 func TransitionIncident(c *gin.Context) { id, err := strconv.ParseUint(c.Param("id"), 10, 64) if err != nil { response.FailWithMessage("异常记录 ID 无效", c) return } var req service.TransitionRequest if err := c.ShouldBindJSON(&req); err != nil { response.FailWithMessage(err.Error(), c) return } isAdmin := strconv.FormatUint(uint64(utils.GetUserAuthorityId(c)), 10) == adminAuthorityId record, err := incidentSvc.TransitionIncident(uint(id), req, utils.GetUserID(c), isAdmin) if err != nil { response.FailWithMessage(err.Error(), c) return } response.OkWithData(record, c) } // GetIncidentStats 异常统计(页面头部汇总)。 func GetIncidentStats(c *gin.Context) { stats, err := incidentSvc.GetIncidentStats() if err != nil { response.FailWithMessage(err.Error(), c) return } response.OkWithData(stats, c) } // SetupIncidentRouter 注册异常处置路由(挂在 PrivateGroup,自动带 JWT+Casbin+操作日志)。 func SetupIncidentRouter(router *gin.RouterGroup) { sr := router.Group("/incident") sr.GET("/list", ListIncidents) sr.GET("/stats", GetIncidentStats) sr.GET("/:id", GetIncident) sr.POST("", CreateIncident) sr.POST("/:id/transition", TransitionIncident) }