新增出库接口,优化发现的缺陷

This commit is contained in:
chenlin 2023-11-17 18:07:01 +08:00
parent e156b3d7d5
commit b95911437f
8 changed files with 204 additions and 94 deletions

View File

@ -10,7 +10,6 @@ import (
"go-admin/tools/app" "go-admin/tools/app"
"io" "io"
"net/http" "net/http"
"strconv"
) )
type CommodityCreateRequest struct { type CommodityCreateRequest struct {
@ -22,7 +21,7 @@ type CommodityCreateRequest struct {
MinRetailPrice uint32 `json:"min_retail_price" binding:"required"` // 最低零售价 MinRetailPrice uint32 `json:"min_retail_price" binding:"required"` // 最低零售价
StaffCostPrice uint32 `json:"staff_cost_price" binding:"required"` // 员工成本价加价 StaffCostPrice uint32 `json:"staff_cost_price" binding:"required"` // 员工成本价加价
WholesalePrice uint32 `json:"wholesale_price" binding:"required"` // 指导采购价 WholesalePrice uint32 `json:"wholesale_price" binding:"required"` // 指导采购价
Brokerage1 string `json:"brokerage_1" binding:"required"` // 销售毛利提成 Brokerage1 string `json:"brokerage_1"` // 销售毛利提成
Brokerage2 string `json:"brokerage_2"` // 员工毛利提成 Brokerage2 string `json:"brokerage_2"` // 员工毛利提成
MemberDiscount string `json:"member_discount"` // 会员优惠 MemberDiscount string `json:"member_discount"` // 会员优惠
Origin string `json:"origin"` // 产地 Origin string `json:"origin"` // 产地
@ -44,27 +43,31 @@ func CommodityCreate(c *gin.Context) {
if err := c.ShouldBindJSON(&req); err != nil { if err := c.ShouldBindJSON(&req); err != nil {
//logger.Error(err) //logger.Error(err)
fmt.Println(err.Error()) fmt.Println(err.Error())
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误") app.Error(c, http.StatusBadRequest, errors.New("param err"), "参数错误")
return return
} }
brokerage1Float, err := strconv.ParseFloat(req.Brokerage1, 64)
brokerage1Float, err := models.StringToFloat(req.Brokerage1)
if err != nil { if err != nil {
//logger.Error("brokerage1 err:", err) //logger.Error("brokerage1 err:", err)
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误") app.Error(c, http.StatusBadRequest, errors.New("param err"), "参数错误")
return return
} }
brokerage2Float, err := strconv.ParseFloat(req.Brokerage2, 64)
brokerage2Float, err := models.StringToFloat(req.Brokerage2)
if err != nil { if err != nil {
//logger.Error("brokerage2 err:", err) //logger.Error("brokerage1 err:", err)
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误") app.Error(c, http.StatusBadRequest, errors.New("param err"), "参数错误")
return return
} }
memberDiscountFloat, err := strconv.ParseFloat(req.MemberDiscount, 64)
memberDiscountFloat, err := models.StringToFloat(req.MemberDiscount)
if err != nil { if err != nil {
//logger.Error("member discount err:", err) //logger.Error("brokerage1 err:", err)
app.Error(c, http.StatusBadRequest, errors.New("para err"), "参数错误") app.Error(c, http.StatusBadRequest, errors.New("param err"), "参数错误")
return return
} }
commodity := &models.ErpCommodity{ commodity := &models.ErpCommodity{
Number: 1, Number: 1,
Name: req.Name, Name: req.Name,
@ -104,7 +107,7 @@ func CommodityCreate(c *gin.Context) {
return return
} }
app.OK(c, commodity, "") app.OK(c, commodity, "OK")
return return
} }

View File

@ -1,63 +0,0 @@
package inventory
import (
"errors"
"github.com/gin-gonic/gin"
"go-admin/app/admin/models"
"go-admin/tools/app"
"net/http"
)
// InventoryList 查询库存列表
// @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
}
// InventoryDetail 查询库存详情
// @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
}

View File

@ -0,0 +1,133 @@
package inventorymanage
import (
"errors"
"github.com/gin-gonic/gin"
"go-admin/app/admin/models"
"go-admin/tools"
"go-admin/tools/app"
"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
}

View File

@ -939,10 +939,10 @@ func (m *StockImporter) ErpInventoryStockCreate(gdb *gorm.DB, list []ErpStockFil
inventoryStockIdMap := make(map[string]uint32, 0) inventoryStockIdMap := make(map[string]uint32, 0)
for _, inventory := range m.Inventories { for _, inventory := range m.Inventories {
//err := gdb.Create(inventory).Error //err := gdb.Create(inventorymanage).Error
err := orm.Eloquent.Create(inventory).Error err := orm.Eloquent.Create(inventory).Error
if err != nil { if err != nil {
//logger.Error("create erp inventory stock err:", err) //logger.Error("create erp inventorymanage stock err:", err)
return err return err
} }
inventoryStockIdMap[fmt.Sprintf("%d_%d", inventory.StoreId, inventory.ErpCommodityId)] = inventory.ID inventoryStockIdMap[fmt.Sprintf("%d_%d", inventory.StoreId, inventory.ErpCommodityId)] = inventory.ID
@ -993,14 +993,14 @@ func (m *StockImporter) ErpInventoryStockCreate(gdb *gorm.DB, list []ErpStockFil
//go func() { //go func() {
// //inventoryStockIdMap := make(map[string]uint32, 0) // //inventoryStockIdMap := make(map[string]uint32, 0)
// //for _, inventory := range m.Inventories { // //for _, inventorymanage := range m.Inventories {
// // //err := gdb.Create(inventory).Error // // //err := gdb.Create(inventorymanage).Error
// // err := orm.Eloquent.Create(inventory).Error // // err := orm.Eloquent.Create(inventorymanage).Error
// // if err != nil { // // if err != nil {
// // logger.Error("create erp inventory stock err:", err) // // logger.Error("create erp inventorymanage stock err:", err)
// // return // // return
// // } // // }
// // inventoryStockIdMap[fmt.Sprintf("%d_%d", inventory.StoreId, inventory.ErpCommodityId)] = inventory.ID // // inventoryStockIdMap[fmt.Sprintf("%d_%d", inventorymanage.StoreId, inventorymanage.ErpCommodityId)] = inventorymanage.ID
// //} // //}
// //
// //stock := ErpStockFileExcel{} // //stock := ErpStockFileExcel{}
@ -1027,7 +1027,7 @@ func (m *StockImporter) ErpInventoryStockCreate(gdb *gorm.DB, list []ErpStockFil
// //err := gdb.Create(inventoryCommodity).Error // //err := gdb.Create(inventoryCommodity).Error
// err := orm.Eloquent.Create(inventoryCommodity).Error // err := orm.Eloquent.Create(inventoryCommodity).Error
// if err != nil { // if err != nil {
// logger.Error("create erp inventory stock commodity err:", err) // logger.Error("create erp inventorymanage stock commodity err:", err)
// return // return
// } // }
// } // }
@ -1062,7 +1062,7 @@ func ErpStockCommodityToInventory(inventoryStockIdMap map[string]uint32, list []
inventoryList = append(inventoryList, inventoryCommodity) inventoryList = append(inventoryList, inventoryCommodity)
//err := orm.Eloquent.Create(inventoryCommodity).Error //err := orm.Eloquent.Create(inventoryCommodity).Error
//if err != nil { //if err != nil {
// logger.Error("create erp inventory stock commodity err:", err) // logger.Error("create erp inventorymanage stock commodity err:", err)
// return inventoryList // return inventoryList
//} //}
} }
@ -1191,7 +1191,7 @@ func (m *ErpStockListReq) List() (*ErpStockListResp, error) {
qs = qs.Where("commodity_serial_number=?", m.SerialNumber) qs = qs.Where("commodity_serial_number=?", m.SerialNumber)
} }
if m.CommodityName != "" { if m.CommodityName != "" {
qs = qs.Where("name Like %" + m.CommodityName + "%") qs = qs.Where("erp_commodity_name LIKE ?", "%"+m.CommodityName+"%")
} }
if m.ErpCategoryId != 0 { if m.ErpCategoryId != 0 {
qs = qs.Where("erp_category_id=?", m.ErpCategoryId) qs = qs.Where("erp_category_id=?", m.ErpCategoryId)
@ -1389,3 +1389,38 @@ func (m *ErpStockCommodityListReq) buildQueryConditions(qs *gorm.DB) {
qs = qs.Where("first_stock_time<?", time.Now().AddDate(0, 0, int(m.AllAge)*(-1))) qs = qs.Where("first_stock_time<?", time.Now().AddDate(0, 0, int(m.AllAge)*(-1)))
} }
} }
func SetStockCommodityState(id, state uint32) error {
if state != 4 {
state = 4
}
if err := orm.Eloquent.Model(&ErpStockCommodity{}).Where("id=?", id).Updates(map[string]interface{}{
"state": state}).Error; err != nil {
return fmt.Errorf("[update err]%v", err)
}
return nil
}
type BatchPrintInfo struct {
ErpCommodityName string `json:"erp_commodity_name" binding:"required"` // 商品名称
RetailPrice uint32 `json:"retail_price" binding:"required"` // 指导零售价
IMEI string `json:"imei" binding:"required"` // 商品串码
}
type BatchPrintInfoReq struct {
PrintListInfo []*BatchPrintInfo `json:"print_list_info" binding:"required"`
}
func BatchPrint(req *BatchPrintInfoReq) error {
return nil
}
func StringToFloat(req string) (float64, error) {
if req == "" {
return 0, nil
}
return strconv.ParseFloat(req, 64)
}

View File

@ -2,13 +2,15 @@ package router
import ( import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/app/admin/apis/inventory" "go-admin/app/admin/apis/inventorymanage"
"go-admin/app/admin/middleware" "go-admin/app/admin/middleware"
jwt "go-admin/pkg/jwtauth" jwt "go-admin/pkg/jwtauth"
) )
func registerInventoryManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { func registerInventoryManageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
r := v1.Group("/inventory").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) r := v1.Group("/inventory").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
r.POST("list", inventory.GetInventoryList) r.POST("list", inventorymanage.GetInventoryList)
r.POST("detail", inventory.GetInventoryDetail) r.POST("detail", inventorymanage.GetInventoryDetail)
r.POST("delivery", inventorymanage.DeliveryCargo) // 出库
r.POST("print", inventorymanage.BatchPrint) // 出库
} }

View File

@ -1473,10 +1473,10 @@ const docTemplate = `{
"tags": [ "tags": [
"库存管理" "库存管理"
], ],
"summary": "查询库存详情", "summary": "出库",
"parameters": [ "parameters": [
{ {
"description": "查询库存详情模型", "description": "出库模型",
"name": "request", "name": "request",
"in": "body", "in": "body",
"required": true, "required": true,

View File

@ -1462,10 +1462,10 @@
"tags": [ "tags": [
"库存管理" "库存管理"
], ],
"summary": "查询库存详情", "summary": "出库",
"parameters": [ "parameters": [
{ {
"description": "查询库存详情模型", "description": "出库模型",
"name": "request", "name": "request",
"in": "body", "in": "body",
"required": true, "required": true,

View File

@ -2774,7 +2774,7 @@ paths:
consumes: consumes:
- application/json - application/json
parameters: parameters:
- description: 查询库存详情模型 - description: 出库模型
in: body in: body
name: request name: request
required: true required: true
@ -2787,7 +2787,7 @@ paths:
description: OK description: OK
schema: schema:
$ref: '#/definitions/models.ErpStockCommodityListResp' $ref: '#/definitions/models.ErpStockCommodityListResp'
summary: 查询库存详情 summary: 出库
tags: tags:
- 库存管理 - 库存管理
/api/v1/inventory/list: /api/v1/inventory/list: