package admin import ( "github.com/go-playground/validator/v10" "github.com/gofiber/fiber/v2" "github.com/break/junhong_cmp_fiber/internal/handler/validation" "github.com/break/junhong_cmp_fiber/internal/model/dto" "github.com/break/junhong_cmp_fiber/internal/query/stopresumerule" exportTaskService "github.com/break/junhong_cmp_fiber/internal/service/export_task" "github.com/break/junhong_cmp_fiber/pkg/constants" "github.com/break/junhong_cmp_fiber/pkg/errors" "github.com/break/junhong_cmp_fiber/pkg/middleware" "github.com/break/junhong_cmp_fiber/pkg/response" ) // StopResumeRuleHandler 停复机规则演练 Handler:只判断不执行,仅超级管理员与平台账号可用。 type StopResumeRuleHandler struct { query *stopresumerule.Query exportService *exportTaskService.Service validator *validator.Validate } // NewStopResumeRuleHandler 创建停复机规则演练 Handler。 func NewStopResumeRuleHandler(query *stopresumerule.Query, exportService *exportTaskService.Service, validator *validator.Validate) *StopResumeRuleHandler { return &StopResumeRuleHandler{query: query, exportService: exportService, validator: validator} } // DryRun 执行停复机规则演练。 // GET /api/admin/stop-resume-rule/dry-run func (h *StopResumeRuleHandler) DryRun(c *fiber.Ctx) error { var req dto.StopResumeRuleDryRunRequest if err := c.QueryParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数格式不正确") } if err := h.validator.Struct(&req); err != nil { return errors.New(errors.CodeInvalidParam, validation.Message("停复机规则演练参数不正确", &req, err)) } result, err := h.query.DryRun(c.UserContext(), &req) if err != nil { return err } return response.Success(c, result) } // Export 创建停复机规则演练明细异步导出任务。 // POST /api/admin/stop-resume-rule/dry-run/export func (h *StopResumeRuleHandler) Export(c *fiber.Ctx) error { if err := stopresumerule.EnsureAllowed(middleware.GetUserTypeFromContext(c.UserContext())); err != nil { return err } var req dto.StopResumeRuleDryRunExportRequest if err := c.BodyParser(&req); err != nil { return errors.New(errors.CodeInvalidParam, "请求参数格式不正确") } if err := h.validator.Struct(&req); err != nil { return errors.New(errors.CodeInvalidParam, validation.Message("停复机规则演练导出参数不正确", &req, err)) } // 创建期校验筛选,避免任务执行时才因参数非法失败。 if _, err := stopresumerule.BuildFilter(req.CarrierID, req.StopReason, req.AssumeControlOn, req.AssumeControlOff); err != nil { return err } format := req.Format if format == "" { format = constants.ExportTaskFormatXLSX } filters := map[string]interface{}{ "stop_reason": req.StopReason, "assume_control_on": req.AssumeControlOn, "assume_control_off": req.AssumeControlOff, } if req.CarrierID != nil { filters["carrier_id"] = *req.CarrierID } result, err := h.exportService.CreateTask(c.UserContext(), &dto.CreateExportTaskRequest{ Scene: constants.ExportTaskSceneStopResumeRuleDryRun, Format: format, Query: map[string]interface{}{"filters": filters}, }) if err != nil { return err } return response.Success(c, result) }