306 lines
7.9 KiB
Go
306 lines
7.9 KiB
Go
package inventorymanage
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"github.com/gin-gonic/gin"
|
|
"go-admin/app/admin/models"
|
|
"go-admin/tools"
|
|
"go-admin/tools/app"
|
|
"io"
|
|
"net/http"
|
|
)
|
|
|
|
// GetInventoryList 查询库存列表
|
|
// @Summary 查询库存列表
|
|
// @Tags 库存管理
|
|
// @Produce json
|
|
// @Accept json
|
|
// @Param request body models.ErpStockListReq true "查询库存列表模型"
|
|
// @Success 200 {object} models.ErpStockListResp
|
|
// @Router /api/v1/inventory/list [post]
|
|
func GetInventoryList(c *gin.Context) {
|
|
req := &models.ErpStockListReq{}
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
//logger.Error(err)
|
|
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误")
|
|
return
|
|
}
|
|
|
|
resp, err := req.List()
|
|
if err != nil {
|
|
//logger.Error("erp commodity list err:", err)
|
|
app.Error(c, http.StatusInternalServerError, err, "获取失败")
|
|
return
|
|
}
|
|
|
|
app.OK(c, resp, "OK")
|
|
return
|
|
}
|
|
|
|
// GetInventoryDetail 查询库存详情
|
|
// @Summary 查询库存详情
|
|
// @Tags 库存管理
|
|
// @Produce json
|
|
// @Accept json
|
|
// @Param request body models.ErpStockCommodityListReq true "查询库存详情模型"
|
|
// @Success 200 {object} models.ErpStockCommodityListResp
|
|
// @Router /api/v1/inventory/detail [post]
|
|
func GetInventoryDetail(c *gin.Context) {
|
|
req := &models.ErpStockCommodityListReq{}
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
//logger.Error(err)
|
|
app.Error(c, http.StatusBadRequest, errors.New("param err"), "参数错误")
|
|
return
|
|
}
|
|
|
|
list, err := req.GetDetailList()
|
|
if err != nil {
|
|
//logger.Error("erp stock err:", err)
|
|
app.Error(c, http.StatusInternalServerError, err, "获取失败")
|
|
return
|
|
}
|
|
|
|
app.OK(c, list, "OK")
|
|
return
|
|
}
|
|
|
|
type DeliveryCargoReq struct {
|
|
Id uint32 `json:"id" binding:"required"` // 商品库存列表id
|
|
State uint32 `json:"state" binding:"required"` // 库存状态:4-出库
|
|
}
|
|
|
|
// DeliveryCargo 出库
|
|
// @Summary 出库
|
|
// @Tags 库存管理
|
|
// @Produce json
|
|
// @Accept json
|
|
// @Param request body DeliveryCargoReq true "出库模型"
|
|
// @Success 200 {object} app.Response
|
|
// @Router /api/v1/inventory/delivery [post]
|
|
func DeliveryCargo(c *gin.Context) {
|
|
req := &DeliveryCargoReq{}
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
//logger.Error(err)
|
|
app.Error(c, http.StatusBadRequest, errors.New("param err"), "参数错误")
|
|
return
|
|
}
|
|
|
|
if err := tools.Validate(req); err != nil {
|
|
app.Error(c, http.StatusBadRequest, err, err.Error())
|
|
return
|
|
}
|
|
|
|
err := models.SetStockCommodityState(req.Id, req.State)
|
|
if err != nil {
|
|
//logger.Error("erp stock err:", err)
|
|
app.Error(c, http.StatusInternalServerError, err, "获取失败")
|
|
return
|
|
}
|
|
|
|
app.OK(c, nil, "OK")
|
|
return
|
|
}
|
|
|
|
// BatchPrint 批量打印
|
|
// @Summary 批量打印
|
|
// @Tags 库存管理
|
|
// @Produce json
|
|
// @Accept json
|
|
// @Param request body models.BatchPrintInfoReq true "批量打印模型"
|
|
// @Success 200 {object} app.Response
|
|
// @Router /api/v1/inventory/print [post]
|
|
func BatchPrint(c *gin.Context) {
|
|
req := &models.BatchPrintInfoReq{}
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
//logger.Error(err)
|
|
app.Error(c, http.StatusBadRequest, errors.New("param err"), "参数错误")
|
|
return
|
|
}
|
|
|
|
if err := tools.Validate(req); err != nil {
|
|
app.Error(c, http.StatusBadRequest, err, err.Error())
|
|
return
|
|
}
|
|
|
|
err := models.BatchPrint(req)
|
|
if err != nil {
|
|
//logger.Error("erp stock err:", err)
|
|
app.Error(c, http.StatusInternalServerError, err, "打印失败")
|
|
return
|
|
}
|
|
|
|
app.OK(c, nil, "OK")
|
|
return
|
|
}
|
|
|
|
// BatchImport 库存导入
|
|
// @Summary 库存导入
|
|
// @Tags 库存管理
|
|
// @Produce json
|
|
// @Accept json
|
|
// @Param file body string true "上传excel文件"
|
|
// @Success 200 {object} app.Response
|
|
// @Router /api/v1/inventory/import [post]
|
|
//func BatchImport(c *gin.Context) {
|
|
// models.EsStockLock.Lock()
|
|
// defer models.EsStockLock.Unlock()
|
|
//
|
|
// file, header, err := c.Request.FormFile("file")
|
|
// if err != nil {
|
|
// //logger.Error("form file err:", err)
|
|
// app.Error(c, http.StatusInternalServerError, err, "导入失败")
|
|
// return
|
|
// }
|
|
// defer file.Close()
|
|
//
|
|
// readAll, err := io.ReadAll(file)
|
|
// if err != nil {
|
|
// //logger.Error("read all err:", err)
|
|
// app.Error(c, http.StatusInternalServerError, err, "导入失败")
|
|
// return
|
|
// }
|
|
// fmt.Println("header:", header.Filename)
|
|
// //fmt.Println("readAll:", readAll)
|
|
//
|
|
// fileStart := time.Now().UnixMilli()
|
|
// bCol, colsMap, err := models.FileExcelImport(readAll, nil, 3)
|
|
// if err != nil {
|
|
// //logger.Error("file excel reader err:", err)
|
|
// app.Error(c, http.StatusInternalServerError, err, err.Error())
|
|
// return
|
|
// }
|
|
// fmt.Println("FileExcelReader", time.Now().UnixMilli()-fileStart)
|
|
// fmt.Println("colsMap:", colsMap)
|
|
// if len(colsMap) != 0 {
|
|
// colsMap = colsMap[1:]
|
|
// }
|
|
//
|
|
// var stockFiles []models.StockExcel
|
|
// err = json.Unmarshal(bCol, &stockFiles)
|
|
// if err != nil {
|
|
// //logger.Error("erp commodity file excel unmarshal err:", err)
|
|
// app.Error(c, http.StatusInternalServerError, err, "导入失败")
|
|
// return
|
|
// }
|
|
// if len(stockFiles) != 0 {
|
|
// stockFiles = stockFiles[1:]
|
|
// }
|
|
// stockier := models.NewStockImporter()
|
|
// fileStart = time.Now().UnixMilli()
|
|
// erpStocks := make([]models.ErpStockCommodity, 0, len(stockFiles))
|
|
// erpStocks, err = stockier.ImportStockData(stockFiles)
|
|
// if err != nil {
|
|
// //logger.Error("processing err:", err)
|
|
// app.Error(c, http.StatusInternalServerError, err, "导入失败")
|
|
// return
|
|
// }
|
|
// fmt.Println("ErpStockFileExcelListProcessing", time.Now().UnixMilli()-fileStart)
|
|
//
|
|
// begin := orm.Eloquent.Begin()
|
|
// total := len(erpStocks)
|
|
// size := 200
|
|
// page := total / size
|
|
// if total%size != 0 {
|
|
// page += 1
|
|
// }
|
|
// errGroup := errgroup.Group{}
|
|
// for i := 0; i < page; i++ {
|
|
// if i == page-1 {
|
|
// stockList := erpStocks[i*size:]
|
|
// err = begin.Create(&stockList).Error
|
|
// if err != nil {
|
|
// begin.Rollback()
|
|
// //logger.Error("create commodity err:", err)
|
|
// app.Error(c, http.StatusInternalServerError, err, "导入失败")
|
|
// return
|
|
// }
|
|
// } else {
|
|
// errGroup.Go(func() error {
|
|
// stockList := erpStocks[i*size : (i+1)*size]
|
|
// err = begin.Create(&stockList).Error
|
|
// if err != nil {
|
|
// begin.Rollback()
|
|
// //logger.Error("create commodity err:", err)
|
|
// return err
|
|
// }
|
|
// return nil
|
|
// })
|
|
// }
|
|
// }
|
|
// err = stockier.ErpStockCountUpdate(begin)
|
|
// if err != nil {
|
|
// begin.Rollback()
|
|
// //logger.Error("erp stock count update err:", err)
|
|
// app.Error(c, http.StatusInternalServerError, err, "导入失败")
|
|
// return
|
|
// }
|
|
//
|
|
// err = errGroup.Wait()
|
|
// if err != nil {
|
|
// begin.Rollback()
|
|
// //logger.Error("err group wait err:", err)
|
|
// app.Error(c, http.StatusInternalServerError, err, "导入失败")
|
|
// return
|
|
// }
|
|
// err = begin.Commit().Error
|
|
// if err != nil {
|
|
// begin.Rollback()
|
|
// //logger.Error("commit err:", err)
|
|
// app.Error(c, http.StatusInternalServerError, err, "导入失败")
|
|
// return
|
|
// }
|
|
//
|
|
// logging := models.Logging{
|
|
// Function: "库存导入",
|
|
// Event: models.LoggingEventInventoryImport,
|
|
// EventName: "库存导入",
|
|
// }
|
|
// logging.Create(c)
|
|
// app.OK(c, nil, "OK")
|
|
// return
|
|
//}
|
|
|
|
func BatchImport(c *gin.Context) {
|
|
models.EsStockLock.Lock()
|
|
defer models.EsStockLock.Unlock()
|
|
|
|
file, header, err := c.Request.FormFile("file")
|
|
if err != nil {
|
|
//logger.Error("form file err:", err)
|
|
app.Error(c, http.StatusInternalServerError, err, "预览失败")
|
|
return
|
|
}
|
|
|
|
readAll, err := io.ReadAll(file)
|
|
if err != nil {
|
|
//logger.Error("read all err:", err)
|
|
app.Error(c, http.StatusInternalServerError, err, "预览失败")
|
|
return
|
|
}
|
|
|
|
fmt.Println("header:", header.Filename)
|
|
|
|
_, colsMap, err := models.FileExcelImport(readAll, nil, 3)
|
|
if err != nil {
|
|
//logger.Error("file excel reader err:", err)
|
|
app.Error(c, http.StatusInternalServerError, err, err.Error())
|
|
return
|
|
}
|
|
|
|
fmt.Println("colsMap:", colsMap)
|
|
if len(colsMap) != 0 {
|
|
colsMap = colsMap[1:]
|
|
}
|
|
|
|
stockier := models.NewStockImporter()
|
|
err = stockier.ImportStockData2(colsMap)
|
|
if err != nil {
|
|
app.Error(c, http.StatusInternalServerError, err, err.Error())
|
|
return
|
|
}
|
|
|
|
app.OK(c, nil, "导入成功")
|
|
return
|
|
}
|