package controller import ( "electricity_bill_calc/exceptions" "electricity_bill_calc/response" "electricity_bill_calc/security" "electricity_bill_calc/service" "net/http" "strconv" "github.com/gofiber/fiber/v2" ) func InitializeWithdrawController(router *fiber.App) { router.Delete("/publicity/:pid", security.EnterpriseAuthorize, applyReportWithdraw) router.Get("/withdraws", security.OPSAuthorize, fetchWithdrawsWaitingAutdit) router.Put("/withdraw/:rid", security.OPSAuthorize, auditWithdraw) } func applyReportWithdraw(c *fiber.Ctx) error { result := response.NewResult(c) requestReportId := c.Params("pid") if ensure, err := ensureReportBelongs(c, &result, requestReportId); !ensure { return err } deleted, err := service.WithdrawService.ApplyWithdraw(requestReportId) if err != nil { if nfErr, ok := err.(exceptions.NotFoundError); ok { return result.NotFound(nfErr.Error()) } else if ioErr, ok := err.(exceptions.ImproperOperateError); ok { return result.NotAccept(ioErr.Error()) } else { return result.Error(http.StatusInternalServerError, err.Error()) } } if !deleted { return result.Error(http.StatusInternalServerError, "未能完成公示报表的申请撤回操作。") } return result.Success("指定的公示报表已经申请撤回。") } func fetchWithdrawsWaitingAutdit(c *fiber.Ctx) error { result := response.NewResult(c) keyword := c.Query("keyword") requestPage, err := strconv.Atoi(c.Query("page", "1")) if err != nil { return result.NotAccept("查询参数[page]格式不正确。") } reports, totalitems, err := service.WithdrawService.FetchPagedWithdrawApplies(requestPage, keyword) if err != nil { return result.NotFound(err.Error()) } return result.Json( http.StatusOK, "已经取得符合条件的等待审核的撤回申请。", response.NewPagedResponse(requestPage, totalitems).ToMap(), fiber.Map{"records": reports}, ) } type WithdrawAuditFormData struct { Audit bool `json:"audit" form:"audit"` } func auditWithdraw(c *fiber.Ctx) error { result := response.NewResult(c) requestReportId := c.Params("rid") formData := new(WithdrawAuditFormData) if err := c.BodyParser(formData); err != nil { return result.UnableToParse("无法解析提交的数据。") } err := service.WithdrawService.AuditWithdraw(requestReportId, formData.Audit) if err != nil { if nfErr, ok := err.(exceptions.NotFoundError); ok { return result.NotFound(nfErr.Error()) } else { return result.NotAccept(err.Error()) } } return result.Success("指定公示报表的撤回申请已经完成审核") }