| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- 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)
- }
|