208 lines
6.1 KiB
Go
208 lines
6.1 KiB
Go
package controllers
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/sirupsen/logrus"
|
|
"net/http"
|
|
"os"
|
|
"psi/constant"
|
|
"psi/database"
|
|
systemReq "psi/models/request"
|
|
systemRes "psi/models/response"
|
|
"psi/service"
|
|
"psi/utils"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type WarehouseApi struct{}
|
|
|
|
var warehouseService = service.WarehouseService{}
|
|
|
|
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": "查询成功",
|
|
})
|
|
}
|
|
|
|
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)
|
|
}
|
|
|
|
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)
|
|
}
|
|
|
|
func (r *LocationApi) LocationToCsv(c *gin.Context) {
|
|
var req systemReq.ExportLocationRequest
|
|
if err := c.ShouldBindQuery(&req); err != nil {
|
|
ValidAndFail(constant.LoggerChannelRequest, "导出库位请求参数异常", "参数错误: "+err.Error(), c, err)
|
|
return
|
|
}
|
|
|
|
result, err := locationService.ExportLocations(req, database.GetDB(c))
|
|
if err != nil {
|
|
utils.FailWithRequestLog(constant.LoggerChannelWork, "导出库位异常", err, c, req)
|
|
return
|
|
}
|
|
|
|
systemRes.OkWithDetailed(result, "导出成功", c)
|
|
}
|
|
|
|
func (r *LocationApi) CsvToLocation(c *gin.Context) {
|
|
var req systemReq.ImportLocationRequest
|
|
if err := c.ShouldBind(&req); err != nil {
|
|
ValidAndFail(constant.LoggerChannelRequest, "导入库位请求参数异常", "参数错误: "+err.Error(), c, err)
|
|
return
|
|
}
|
|
|
|
file, err := c.FormFile("file")
|
|
if err != nil {
|
|
systemRes.FailWithValidateMessage("请上传文件", c)
|
|
return
|
|
}
|
|
|
|
if !strings.HasSuffix(strings.ToLower(file.Filename), ".xlsx") && !strings.HasSuffix(strings.ToLower(file.Filename), ".xls") {
|
|
systemRes.FailWithValidateMessage("只支持Excel文件格式(.xlsx, .xls)", c)
|
|
return
|
|
}
|
|
|
|
filePath := fmt.Sprintf("excel/import_%s_%d.xlsx", time.Now().Format("20060102150405"), time.Now().UnixNano())
|
|
if err := c.SaveUploadedFile(file, filePath); err != nil {
|
|
utils.FailWithRequestLog(constant.LoggerChannelWork, "保存上传文件异常", err, c, gin.H{"filename": file.Filename})
|
|
return
|
|
}
|
|
|
|
defer func() {
|
|
if err := os.Remove(filePath); err != nil {
|
|
utils.ErrorLog(constant.LoggerChannelWork, logrus.Fields{
|
|
"source": "删除临时文件失败",
|
|
"err_msg": err.Error(),
|
|
})
|
|
}
|
|
}()
|
|
|
|
result, err := locationService.ImportLocationsFromCSV(req, filePath, database.GetDB(c))
|
|
if err != nil {
|
|
utils.FailWithRequestLog(constant.LoggerChannelWork, "导入库位异常", err, c, gin.H{"filename": file.Filename})
|
|
return
|
|
}
|
|
|
|
systemRes.OkWithDetailed(result, result.Message, c)
|
|
}
|
|
|
|
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": "查询成功",
|
|
})
|
|
}
|