forked from free-lancers/electricity_bill_calc_service
		
	
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
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("指定公示报表的撤回申请已经完成审核")
 | 
						|
}
 |