Files
ops2/backend/ai_work/internal/handler/purchase_handler.go
T
2026-04-01 12:09:02 +08:00

155 lines
4.2 KiB
Go

package handler
import (
"ops/internal/service"
"ops/pkg/response"
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
"gorm.io/gorm"
)
type PurchaseHandler struct {
service service.PurchaseService
}
func NewPurchaseHandler(db *gorm.DB) *PurchaseHandler {
return &PurchaseHandler{
service: service.NewPurchaseService(db),
}
}
// GetOrders 获取采购订单列表
// @Summary 获取采购订单列表
// @Description 获取用户采购订单列表,支持搜索和分页
// @Tags 采购管理
// @Accept json
// @Produce json
// @Param userID header string false "用户ID" default("")
// @Param search query string false "搜索关键词"
// @Param page query int true "页码" default(1)
// @Param entries query int true "每页数量" default(20)
// @Success 200 {object} response.StandardResponse "成功"
// @Failure 400 {object} response.StandardResponse "参数错误"
// @Failure 401 {object} response.StandardResponse "未授权"
// @Failure 500 {object} response.StandardResponse "服务器错误"
// @Router /api/v1/purchase/orders [get]
func (h *PurchaseHandler) GetOrders(c *gin.Context) {
// 从上下文中获取用户ID
userID, exists := c.Get("userID")
if !exists {
response.Unauthorized(c)
return
}
// 获取查询参数
search := c.Query("search")
page := GetIntParam(c, "page", 1)
entries := GetIntParam(c, "entries", 20)
// 调用Service
result, success := h.service.GetOrders(c, userID.(uint), search, page, entries)
if !success {
response.BadRequest(c, "参数错误")
return
}
response.Success(c, result)
}
// CreateOrder 创建采购订单
// @Summary 创建采购订单
// @Description 创建新的采购订单
// @Tags 采购管理
// @Accept json
// @Produce json
// @Param userID header string false "用户ID" default("")
// @Param request body service.CreateOrderRequest true "订单信息"
// @Success 200 {object} response.StandardResponse "成功"
// @Failure 400 {object} response.StandardResponse "参数错误"
// @Failure 401 {object} response.StandardResponse "未授权"
// @Failure 500 {object} response.StandardResponse "服务器错误"
// @Router /api/v1/purchase/orders [post]
func (h *PurchaseHandler) CreateOrder(c *gin.Context) {
// 从上下文中获取用户ID
userID, exists := c.Get("userID")
if !exists {
response.Unauthorized(c)
return
}
// 解析请求体
var request service.CreateOrderRequest
if err := c.ShouldBindJSON(&request); err != nil {
var validationErrors []string
for _, err := range err.(validator.ValidationErrors) {
validationErrors = append(validationErrors, err.Field()+" "+err.Tag())
}
if len(validationErrors) > 0 {
response.BadRequest(c, "参数错误: "+validationErrors[0])
} else {
response.BadRequest(c, "请求格式错误")
}
return
}
// 调用Service
success := h.service.CreateOrder(c, userID.(uint), request)
if !success {
response.BadRequest(c, "创建订单失败,请检查数据")
return
}
response.Success(c, gin.H{"message": "订单创建成功"})
}
// GetOrderDetails 获取订单详情
// @Summary 获取订单详情
// @Description 获取采购订单的详细信息
// @Tags 采购管理
// @Accept json
// @Produce json
// @Param userID header string false "用户ID" default("")
// @Param id path int true "订单ID"
// @Success 200 {object} response.StandardResponse "成功"
// @Failure 401 {object} response.StandardResponse "未授权"
// @Failure 404 {object} response.StandardResponse "订单不存在"
// @Failure 500 {object} response.StandardResponse "服务器错误"
// @Router /api/v1/purchase/orders/{id} [get]
func (h *PurchaseHandler) GetOrderDetails(c *gin.Context) {
// 从上下文中获取用户ID
userID, exists := c.Get("userID")
if !exists {
response.Unauthorized(c)
return
}
// 获取订单ID
orderID := GetUintParam(c, "id")
if orderID == 0 {
response.BadRequest(c, "订单ID无效")
return
}
// 调用Service
order, costs, err := h.service.GetOrderDetails(orderID)
if err != nil {
if err == gorm.ErrRecordNotFound {
response.Error(c, "-5", "订单不存在")
} else {
response.InternalError(c, err)
}
return
}
// 检查订单所属用户
if order.UserID != userID.(uint) {
response.Unauthorized(c)
return
}
response.Success(c, gin.H{
"order": order,
"costs": costs,
})
}