daShangDao_psiServer/controllers/warehouse.go

151 lines
4.3 KiB
Go

package controllers
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
"net/http"
"psi/constant"
"psi/database"
systemReq "psi/models/request"
systemRes "psi/models/response"
"psi/service"
"psi/utils"
)
type WarehouseApi struct{}
var warehouseService = service.WarehouseService{}
// GetWarehouseList 获取仓库列表
func (r *WarehouseApi) GetWarehouseList(c *gin.Context) {
var req systemReq.QueryWarehouseRequest
if err := c.ShouldBindQuery(&req); err != nil {
ValidAndFail(constant.LoggerChannelRequest, "查询仓库列表请求参数异常", "参数错误: "+err.Error(), c, err)
return
}
if len(req.IDs) == 0 {
ids, err := parseIds(c)
if err != nil {
systemRes.FailWithValidateMessage("参数错误: "+err.Error(), c)
return
}
req.IDs = ids
}
list, total, err := warehouseService.GetWarehouseList(req, database.GetDB(c))
if err != nil {
utils.FailWithRequestLog(constant.LoggerChannelWork, "查询仓库列表异常", err, c, req)
return
}
c.JSON(http.StatusOK, gin.H{
"code": 0,
"data": gin.H{
"list": list,
"total": total,
"page": req.Page,
"page_size": req.PageSize,
},
"msg": "查询成功",
})
}
// GetWarehouseDetail 获取仓库详情
func (r *WarehouseApi) GetWarehouseDetail(c *gin.Context) {
idStr := c.Param("id")
if idStr == "" {
utils.ErrorLog(constant.LoggerChannelRequest, logrus.Fields{
"source": "获取仓库详情请求参数异常",
"err_msg": "ID参数不能为空",
})
systemRes.FailWithValidateMessage("参数错误: ID不能为空", c)
return
}
var id int64
if _, err := fmt.Sscanf(idStr, "%d", &id); err != nil || id <= 0 {
utils.ErrorLog(constant.LoggerChannelRequest, logrus.Fields{
"source": "获取仓库详情请求参数异常",
"err_msg": "ID格式错误: " + idStr,
})
systemRes.FailWithValidateMessage("参数错误: ID格式不正确", c)
return
}
warehouse, err := warehouseService.GetWarehouseByID(id, database.GetDB(c))
if err != nil {
utils.FailWithRequestLog(constant.LoggerChannelWork, "查询仓库详情异常", err, c, gin.H{"id": id})
return
}
systemRes.OkWithDetailed(warehouse, "查询成功", c)
}
// CreateWarehouse 创建仓库
func (r *WarehouseApi) CreateWarehouse(c *gin.Context) {
var req systemReq.CreateWarehouseRequest
if err := c.ShouldBind(&req); err != nil {
ValidAndFail(constant.LoggerChannelRequest, "创建仓库请求参数异常", "参数错误: "+err.Error(), c, err)
return
}
userInfo := utils.GetUserInfo(c)
id, err := warehouseService.CreateWarehouse(req, userInfo.AboutID, userInfo.Username, database.GetDB(c))
if err != nil {
utils.FailWithRequestLog(constant.LoggerChannelWork, "创建仓库异常", err, c, req)
return
}
systemRes.OkWithDetailed(gin.H{"id": id}, "创建成功", c)
}
func (r *WarehouseApi) UpdateWarehouse(c *gin.Context) {
var req systemReq.UpdateWarehouseRequest
if err := c.ShouldBind(&req); err != nil {
ValidAndFail(constant.LoggerChannelRequest, "更新仓库请求参数异常", "参数错误: "+err.Error(), c, err)
return
}
userInfo := utils.GetUserInfo(c)
if err := warehouseService.UpdateWarehouse(req, userInfo.AboutID, userInfo.Username, database.GetDB(c)); err != nil {
utils.FailWithRequestLog(constant.LoggerChannelWork, "更新仓库异常", err, c, req)
return
}
systemRes.OkWithMessage("更新成功", c)
}
func (r *WarehouseApi) DeleteWarehouse(c *gin.Context) {
var req systemReq.DeleteWarehouseRequest
if err := c.ShouldBind(&req); err != nil {
ValidAndFail(constant.LoggerChannelRequest, "删除仓库请求参数异常", "参数错误: "+err.Error(), c, err)
return
}
userInfo := utils.GetUserInfo(c)
if err := warehouseService.DeleteWarehouse(req.ID, userInfo.AboutID, userInfo.Username, database.GetDB(c)); err != nil {
utils.FailWithRequestLog(constant.LoggerChannelWork, "删除仓库异常", err, c, req)
return
}
systemRes.OkWithMessage("删除成功", c)
}
// GetUserWarehouseMappings 获取用户的仓库映射列表
func (r *WarehouseApi) GetUserWarehouseMappings(c *gin.Context) {
data, err := warehouseService.GetUserWarehouseMappings()
if err != nil {
utils.FailWithRequestLog(constant.LoggerChannelWork, "获取用户的仓库映射列表异常", err, c, nil)
return
}
c.JSON(http.StatusOK, gin.H{
"code": 0,
"data": data,
"msg": "查询成功",
})
}