jiangshuai
2023-10-20 96844c22ef3fba86a55e0af1b51bc1009d6fa950
1.库存盘点bug修改
9个文件已修改
406 ■■■■ 已修改文件
controllers/location_product.go 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/location_product_amount.go 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/operation.go 194 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/product_controller.go 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/docs.go 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/swagger.json 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/swagger.yaml 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/location_product_amount.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
request/location_product_amount.go 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/location_product.go
@@ -2,7 +2,9 @@
import (
    "github.com/gin-gonic/gin"
    "github.com/shopspring/decimal"
    "strconv"
    "time"
    "wms/extend/code"
    "wms/extend/util"
    "wms/models"
@@ -48,11 +50,22 @@
    //    util.ResponseFormat(c, code.RequestParamError, "请选择产品类别")
    //    return
    //}
    if err := models.NewLocationProductSearch().Create(&params); err != nil {
        logx.Errorf("Operation create err: %v", err)
        util.ResponseFormat(c, code.SaveFail, "添加失败:"+err.Error())
        return
    }
    locationProductAmount := &models.LocationProductAmount{
        LocationProductId: params.Id,
        Amount:            decimal.NewFromFloat(0),
        CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
    }
    if err := models.NewLocationProductAmountSearch().Create(locationProductAmount); err != nil {
        logx.Errorf("Operation create err: %v", err)
        util.ResponseFormat(c, code.SaveFail, "添加失败:"+err.Error())
        return
    }
    util.ResponseFormat(c, code.Success, "添加成功")
}
controllers/location_product_amount.go
@@ -1,6 +1,7 @@
package controllers
import (
    "errors"
    "fmt"
    "github.com/gin-gonic/gin"
    "github.com/shopspring/decimal"
@@ -37,27 +38,17 @@
    }
    search := models.NewLocationProductAmountSearch()
    search.SetPage(params.Page, params.PageSize)
    //search.SetPage(params.Page, params.PageSize)
    //wms_operation_details.amount as adjust_amount,wms_operation.id as operation_id,wms_operation.status
    search.Orm = search.Orm.
        Table("wms_location_product_amount").
        Select(`
                    wms_location_product_amount.id as location_product_amount_id,
                    wms_location.id as location_id,
                    wms_location.name as location_name,
                    material.id as product_id,
                    material.name as product_name,
                    wms_location_product_amount.amount,
                    material.unit,
                    wms_location_product_amount.create_date,
                    wms_operation_details.amount as adjust_amount,
                    wms_operation.id as operation_id,
                    wms_operation.status`).
        Select(`wms_location_product_amount.id as location_product_amount_id,wms_location.id as location_id,wms_location.name as location_name,material.id as product_id,material.name as product_name,wms_location_product_amount.amount,material.unit,wms_location_product_amount.create_date`).
        InnerJoins("inner join wms_location_product on wms_location_product.id=wms_location_product_amount.location_product_id").
        InnerJoins("inner join material on material.id=wms_location_product.product_id").
        InnerJoins("inner join wms_location on wms_location.id=wms_location_product.location_id").
        Joins("left join wms_operation_details on wms_operation_details.product_id=wms_location_product.product_id").
        Joins("left join wms_operation on wms_operation.id=wms_operation_details.operation_id and wms_operation.base_operation_type=? and wms_operation.status=?", constvar.BaseOperationTypeAdjust, constvar.OperationStatus_Ready)
        InnerJoins("inner join wms_location on wms_location.id=wms_location_product.location_id")
    //Joins("inner join wms_operation_details on wms_operation_details.product_id=wms_location_product.product_id").
    //Joins("inner join wms_operation on wms_operation.id=wms_operation_details.operation_id and wms_operation.base_operation_type=? and wms_operation.status=?", constvar.BaseOperationTypeAdjust, constvar.OperationStatus_Ready)
    var (
        records = make([]*models.LocationProductAmountWithOperation, 0)
        total   int64
@@ -71,12 +62,24 @@
    if params.Page*params.PageSize > 0 {
        search.Orm = search.Orm.Offset((params.Page - 1) * params.PageSize).Limit(params.PageSize)
    }
    if err := search.Orm.Order("wms_operation.created_at desc").Find(&records).Error; err != nil {
    if err := search.Orm.Order("wms_location_product_amount.updated_at desc").Find(&records).Error; err != nil {
        util.ResponseFormat(c, code.RequestError, fmt.Errorf("find count err: %v", err))
        return
    }
    var operation models.Operation
    for k, v := range records {
        if v.OperationId != 0 {
        if res := models.NewOperationSearch().Orm.Preload("Details", "product_id=?", v.ProductId).Where("wms_operation.base_operation_type=? and wms_operation.status=? and wms_operation.to_location_id=?", constvar.BaseOperationTypeAdjust, constvar.OperationStatus_Ready, v.LocationId).First(&operation); res.Error != nil {
            if errors.Is(res.Error, gorm.ErrRecordNotFound) {
                records[k].Status = constvar.OperationStatus_Finish
                continue
            } else {
                util.ResponseFormat(c, code.RequestError, fmt.Errorf("find operation err: %v", res.Error.Error()))
                return
            }
        } else {
            records[k].AdjustAmount = operation.Details[0].Amount
            records[k].OperationId = operation.Id
            records[k].Status = operation.Status
            records[k].DifferenceAmount = v.Amount.Add(v.AdjustAmount)
        }
    }
@@ -87,52 +90,51 @@
// @Tags      库存盘点
// @Summary   添加库存盘点信息
// @Produce   application/json
// @Param     object  body  request.AddLocationProductAmount true  "入库/出库信息"
// @Param     object  body  request.UpdateLocationProductAmount true  "入库/出库信息"
// @Success   200 {object} util.Response "成功"
// @Router    /api-wms/v1/locationProductAmount/add [post]
func (slf LocationProductAmountController) Add(c *gin.Context) {
    var reqParams request.AddLocationProductAmount
    var reqParams request.UpdateLocationProductAmount
    if err := c.BindJSON(&reqParams); err != nil {
        util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
        return
    }
    if err := AddLocationProductAmount(reqParams); err != nil {
        util.ResponseFormat(c, code.RequestError, err)
    }
    util.ResponseFormat(c, code.Success, "添加成功")
}
func AddLocationProductAmount(reqParams request.UpdateLocationProductAmount) error {
    if reqParams.LocationId == 0 {
        util.ResponseFormat(c, code.RequestParamError, "参数异常,请选择位置")
        return
        return errors.New("参数异常,位置id信息不存在")
    }
    if reqParams.ProductId == "" {
        util.ResponseFormat(c, code.RequestParamError, "参数异常,请选择产品")
        return
        return errors.New("参数异常,产品id信息不存在")
    }
    var existCount int64
    if err := models.NewOperationSearch().Orm.Table("wms_operation").InnerJoins("inner join wms_operation_details on wms_operation_details.operation_id=wms_operation.id").Where("wms_operation.from_location_id=? and wms_operation_details.product_id=? and wms_operation.base_operation_type=? and wms_operation.status=?", reqParams.LocationId, reqParams.ProductId, constvar.BaseOperationTypeAdjust, constvar.OperationStatus_Ready).Count(&existCount).Error; err != nil {
        util.ResponseFormat(c, code.RequestParamError, err.Error())
        return
        return err
    }
    if existCount > 0 {
        util.ResponseFormat(c, code.RequestError, "该商品在已选中的位置存在未验证的库存盘点信息,无法继续添加相关信息")
        return
        return errors.New("该商品在已选中的位置存在未验证的库存盘点信息,无法继续添加相关信息")
    }
    locProduct, err := models.NewLocationProductSearch().SetLocationId(reqParams.LocationId).SetProductId(reqParams.ProductId).First()
    if err != nil {
        util.ResponseFormat(c, code.RequestParamError, "参数异常,未找到该上架规则")
        return
        return errors.New("参数异常,未找到该上架规则")
    }
    if locProduct.Id == 0 {
        util.ResponseFormat(c, code.RequestError, "不存在该上架规则,无法进行库存盘点")
        return
    }
    existAmount, err := models.NewLocationProductAmountSearch().SetLocationProductId(locProduct.Id).First()
    if err != nil {
        util.ResponseFormat(c, code.RequestError, err.Error())
        return
        return err
    }
    location, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeAdjust)).First()
    if err != nil {
        util.ResponseFormat(c, code.RequestParamError, err.Error())
        return
        return err
    }
    //reqParams.AdjustAmount = reqParams.Amount.Sub(reqParams.DifferenceAmount)
    reqParams.AdjustAmount = reqParams.DifferenceAmount.Sub(reqParams.Amount)
@@ -171,11 +173,9 @@
        }
        return nil
    }); err != nil {
        util.ResponseFormat(c, code.RequestError, err.Error())
        return
        return err
    }
    util.ResponseFormat(c, code.Success, "添加成功")
    return nil
}
// GetRuleList
@@ -217,6 +217,14 @@
        util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
        return
    }
    if reqParams.OperationId == 0 {
        if err := AddLocationProductAmount(reqParams); err != nil {
            util.ResponseFormat(c, code.RequestError, err.Error())
            return
        }
        util.ResponseFormat(c, code.Success, "添加成功")
        return
    }
    reqParams.AdjustAmount = reqParams.DifferenceAmount.Sub(reqParams.Amount)
    operation, err := models.NewOperationSearch().SetID(reqParams.OperationId).First()
    if err != nil {
controllers/operation.go
@@ -330,108 +330,108 @@
        if err := models.NewOperationSearch().SetOrm(tx).SetID(id).Update(&models.Operation{Status: constvar.OperationStatus_Finish}); err != nil {
            return err
        }
        if operationType.BaseOperationType != constvar.BaseOperationTypeInternal {
            var listProdtId []string
            var listProdt []*models.Material
            mapProdt := make(map[string]decimal.Decimal)
            listDetails, err := models.NewOperationDetailsSearch().SetOperationId(operation.Id).FindAll()
            if err != nil {
                return err
            }
            for _, v := range listDetails {
                listProdtId = append(listProdtId, v.ProductId)
                mapProdt[v.ProductId] = v.Amount
            }
            if err := models.NewMaterialSearch().Orm.Where("id IN ?", listProdtId).Find(&listProdt).Error; err != nil {
                return err
            }
            if operationType.BaseOperationType == constvar.BaseOperationTypeIncoming {
                for k, v := range listProdt {
                    if value, ok := mapProdt[v.ID]; !ok {
                        return errors.New("产品种类异常")
                    } else {
                        listProdt[k].Amount = listProdt[k].Amount.Add(value)
                        if err := tx.Save(listProdt[k]).Error; err != nil {
                            return err
                        }
                        //TODO:出入库的finish和报废的finish都要增加对location_product_amount表数量的更新,因为此表有ProductCategory字段,所以operation_details表中要增加ProductCategoryId字段
                        var locAmount models.LocationProductAmount
                        if err := models.NewLocationProductAmountSearch().Orm.
                            Table("wms_location_produt_amount").
                            Joins("inner join wms_location_product on wms_location_produt.id=wms_location_produt_amount.location_product_id").
                            Where("wms_location_produt.product_id=? and wms_location_produt.location_id=?", v.ID, operation.ToLocationID).
                            First(&locAmount).Error; err != nil {
                            return err
                        }
                        locAmount.Amount = locAmount.Amount.Add(value)
                        if err := models.NewLocationProductAmountSearch().SetID(locAmount.Id).Update(&locAmount); err != nil {
                            return err
                        }
        //if operationType.BaseOperationType != constvar.BaseOperationTypeInternal {
        var listProdtId []string
        var listProdt []*models.Material
        mapProdt := make(map[string]decimal.Decimal)
        listDetails, err := models.NewOperationDetailsSearch().SetOperationId(operation.Id).FindAll()
        if err != nil {
            return err
        }
        for _, v := range listDetails {
            listProdtId = append(listProdtId, v.ProductId)
            mapProdt[v.ProductId] = v.Amount
        }
        if err := models.NewMaterialSearch().Orm.Where("id IN ?", listProdtId).Find(&listProdt).Error; err != nil {
            return err
        }
        if operationType.BaseOperationType == constvar.BaseOperationTypeIncoming {
            for k, v := range listProdt {
                if value, ok := mapProdt[v.ID]; !ok {
                    return errors.New("产品种类异常")
                } else {
                    listProdt[k].Amount = listProdt[k].Amount.Add(value)
                    if err := tx.Save(listProdt[k]).Error; err != nil {
                        return err
                    }
                    //TODO:出入库的finish和报废的finish都要增加对location_product_amount表数量的更新,因为此表有ProductCategory字段,所以operation_details表中要增加ProductCategoryId字段
                    var locAmount models.LocationProductAmount
                    if err := models.NewLocationProductAmountSearch().Orm.
                        Table("wms_location_product_amount").
                        Joins("inner join wms_location_product on wms_location_product.id=wms_location_product_amount.location_product_id").
                        Where("wms_location_product.product_id=? and wms_location_product.location_id=?", v.ID, operation.ToLocationID).
                        First(&locAmount).Error; err != nil {
                        return err
                    }
                    locAmount.Amount = locAmount.Amount.Add(value)
                    if err := models.NewLocationProductAmountSearch().SetID(locAmount.Id).Update(&locAmount); err != nil {
                        return err
                    }
                }
            }
            if operationType.BaseOperationType == constvar.BaseOperationTypeOutgoing {
                for k, v := range listProdt {
                    if value, ok := mapProdt[v.ID]; !ok {
                        return errors.New("产品种类异常")
                    } else {
                        if v.Amount.LessThan(value) {
                            return errors.New(fmt.Sprintf("产品:%v,库存:%v,出库:%v,数量不够,无法完成出库操作", v.Name, v.Amount.String(), value.String()))
                        }
                        listProdt[k].Amount = listProdt[k].Amount.Sub(value)
                        if err := tx.Save(listProdt[k]).Error; err != nil {
                            return err
                        }
                        var locAmount models.LocationProductAmount
                        if err := models.NewLocationProductAmountSearch().Orm.Table("wms_location_produt_amount").Joins("inner join wms_location_product on wms_location_produt.id=wms_location_produt_amount.location_product_id").Where("wms_location_produt.product_id=? and wms_location_produt.location_id=?", v.ID, operation.ToLocationID).First(&locAmount).Error; err != nil {
                            return err
                        }
                        if locAmount.Amount.LessThan(value) {
                            return errors.New(fmt.Sprintf("产品:%v,库存:%v,出库:%v,数量不够,无法完成出库操作", v.Name, v.Amount.String(), value.String()))
                        }
                        locAmount.Amount = locAmount.Amount.Sub(value)
                        if err := models.NewLocationProductAmountSearch().SetID(locAmount.Id).Update(&locAmount); err != nil {
                            return err
                        }
                    }
                }
            }
            if operationType.BaseOperationType == constvar.BaseOperationTypeInternal {
                for k, v := range listProdt {
                    if value, ok := mapProdt[v.ID]; !ok {
                        return errors.New("产品种类异常")
                    } else {
                        listProdt[k].Amount = listProdt[k].Amount.Add(value)
                        if err := tx.Save(listProdt[k]).Error; err != nil {
                            return err
                        }
                        //TODO:出入库的finish和报废的finish都要增加对location_product_amount表数量的更新,因为此表有ProductCategory字段,所以operation_details表中要增加ProductCategoryId字段
                        var fromAmount, toAmount models.LocationProductAmount
                        if err := models.NewLocationProductAmountSearch().Orm.Table("wms_location_produt_amount").Joins("inner join wms_location_product on wms_location_produt.id=wms_location_produt_amount.location_product_id").Where("wms_location_produt.product_id=? and wms_location_produt.location_id=?", v.ID, operation.FromLocationID).Find(&fromAmount).Error; err != nil {
                            return err
                        }
                        if fromAmount.Amount.LessThan(value) {
                            return errors.New(fmt.Sprintf("产品:%v,库存:%v,调拨:%v,数量不够,无法完成调拨操作", v.Name, v.Amount.String(), value.String()))
                        }
                        fromAmount.Amount = fromAmount.Amount.Sub(value)
                        if err := models.NewLocationProductAmountSearch().SetID(fromAmount.Id).Update(&fromAmount); err != nil {
                            return err
                        }
                        if err := models.NewLocationProductAmountSearch().Orm.Table("wms_location_produt_amount").Joins("inner join wms_location_product on wms_location_produt.id=wms_location_produt_amount.location_product_id").Where("wms_location_produt.product_id=? and wms_location_produt.location_id=?", v.ID, operation.ToLocationID).Find(&toAmount).Error; err != nil {
                            return err
                        }
                        toAmount.Amount = toAmount.Amount.Add(value)
                        if err := models.NewLocationProductAmountSearch().SetID(toAmount.Id).Update(&toAmount); err != nil {
                            return err
                        }
                    }
                }
            }
        }
        if operationType.BaseOperationType == constvar.BaseOperationTypeOutgoing {
            for k, v := range listProdt {
                if value, ok := mapProdt[v.ID]; !ok {
                    return errors.New("产品种类异常")
                } else {
                    if v.Amount.LessThan(value) {
                        return errors.New(fmt.Sprintf("产品:%v,库存:%v,出库:%v,数量不够,无法完成出库操作", v.Name, v.Amount.String(), value.String()))
                    }
                    listProdt[k].Amount = listProdt[k].Amount.Sub(value)
                    if err := tx.Save(listProdt[k]).Error; err != nil {
                        return err
                    }
                    var locAmount models.LocationProductAmount
                    if err := models.NewLocationProductAmountSearch().Orm.Table("wms_location_product_amount").Joins("inner join wms_location_product on wms_location_product.id=wms_location_product_amount.location_product_id").Where("wms_location_product.product_id=? and wms_location_product.location_id=?", v.ID, operation.FromLocationID).First(&locAmount).Error; err != nil {
                        return err
                    }
                    if locAmount.Amount.LessThan(value) {
                        return errors.New(fmt.Sprintf("产品:%v,库存:%v,出库:%v,数量不够,无法完成出库操作", v.Name, v.Amount.String(), value.String()))
                    }
                    locAmount.Amount = locAmount.Amount.Sub(value)
                    if err := models.NewLocationProductAmountSearch().SetID(locAmount.Id).Update(&locAmount); err != nil {
                        return err
                    }
                }
            }
        }
        if operationType.BaseOperationType == constvar.BaseOperationTypeInternal {
            for k, v := range listProdt {
                if value, ok := mapProdt[v.ID]; !ok {
                    return errors.New("产品种类异常")
                } else {
                    listProdt[k].Amount = listProdt[k].Amount.Add(value)
                    if err := tx.Save(listProdt[k]).Error; err != nil {
                        return err
                    }
                    //TODO:出入库的finish和报废的finish都要增加对location_product_amount表数量的更新,因为此表有ProductCategory字段,所以operation_details表中要增加ProductCategoryId字段
                    var fromAmount, toAmount models.LocationProductAmount
                    if err := models.NewLocationProductAmountSearch().Orm.Table("wms_location_product_amount").Joins("inner join wms_location_product on wms_location_product.id=wms_location_product_amount.location_product_id").Where("wms_location_product.product_id=? and wms_location_product.location_id=?", v.ID, operation.FromLocationID).Find(&fromAmount).Error; err != nil {
                        return err
                    }
                    if fromAmount.Amount.LessThan(value) {
                        return errors.New(fmt.Sprintf("产品:%v,库存:%v,调拨:%v,数量不够,无法完成调拨操作", v.Name, v.Amount.String(), value.String()))
                    }
                    fromAmount.Amount = fromAmount.Amount.Sub(value)
                    if err := models.NewLocationProductAmountSearch().SetID(fromAmount.Id).Update(&fromAmount); err != nil {
                        return err
                    }
                    if err := models.NewLocationProductAmountSearch().Orm.Table("wms_location_product_amount").Joins("inner join wms_location_product on wms_location_product.id=wms_location_product_amount.location_product_id").Where("wms_location_product.product_id=? and wms_location_product.location_id=?", v.ID, operation.ToLocationID).Find(&toAmount).Error; err != nil {
                        return err
                    }
                    toAmount.Amount = toAmount.Amount.Add(value)
                    if err := models.NewLocationProductAmountSearch().SetID(toAmount.Id).Update(&toAmount); err != nil {
                        return err
                    }
                }
            }
        }
        //}
        return nil
    }); err != nil {
        util.ResponseFormat(c, code.RequestError, err.Error())
controllers/product_controller.go
@@ -485,6 +485,21 @@
                if err := tx.Save(listProdt[k]).Error; err != nil {
                    return err
                }
                var locAmount models.LocationProductAmount
                if err := models.NewLocationProductAmountSearch().Orm.
                    Table("wms_location_product_amount").
                    Joins("inner join wms_location_product on wms_location_product.id=wms_location_product_amount.location_product_id").
                    Where("wms_location_product.product_id=? and wms_location_product.location_id=?", v.ID, operation.FromLocationID).
                    First(&locAmount).Error; err != nil {
                    return err
                }
                if locAmount.Amount.LessThan(value) {
                    return errors.New(fmt.Sprintf("产品:%v,库存:%v,出库:%v,数量不够,无法完成出库操作", v.Name, v.Amount.String(), value.String()))
                }
                locAmount.Amount = locAmount.Amount.Sub(value)
                if err := models.NewLocationProductAmountSearch().SetID(locAmount.Id).Update(&locAmount); err != nil {
                    return err
                }
            }
        }
        return nil
docs/docs.go
@@ -736,7 +736,7 @@
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/request.AddLocationProductAmount"
                            "$ref": "#/definitions/request.UpdateLocationProductAmount"
                        }
                    }
                ],
@@ -2813,29 +2813,6 @@
                }
            }
        },
        "request.AddLocationProductAmount": {
            "type": "object",
            "properties": {
                "Amount": {
                    "description": "库存数量",
                    "type": "number"
                },
                "adjustAmount": {
                    "description": "差值",
                    "type": "number"
                },
                "differenceAmount": {
                    "description": "计数数量",
                    "type": "number"
                },
                "locationId": {
                    "type": "integer"
                },
                "productId": {
                    "type": "string"
                }
            }
        },
        "request.AddOperation": {
            "type": "object",
            "properties": {
@@ -3386,6 +3363,10 @@
                    "description": "计数数量",
                    "type": "number"
                },
                "locationId": {
                    "description": "位置id",
                    "type": "integer"
                },
                "operationId": {
                    "description": "出入库id",
                    "type": "integer"
@@ -3734,8 +3715,6 @@
    Description:      "",
    InfoInstanceName: "swagger",
    SwaggerTemplate:  docTemplate,
    LeftDelim:        "{{",
    RightDelim:       "}}",
}
func init() {
docs/swagger.json
@@ -724,7 +724,7 @@
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/request.AddLocationProductAmount"
                            "$ref": "#/definitions/request.UpdateLocationProductAmount"
                        }
                    }
                ],
@@ -2801,29 +2801,6 @@
                }
            }
        },
        "request.AddLocationProductAmount": {
            "type": "object",
            "properties": {
                "Amount": {
                    "description": "库存数量",
                    "type": "number"
                },
                "adjustAmount": {
                    "description": "差值",
                    "type": "number"
                },
                "differenceAmount": {
                    "description": "计数数量",
                    "type": "number"
                },
                "locationId": {
                    "type": "integer"
                },
                "productId": {
                    "type": "string"
                }
            }
        },
        "request.AddOperation": {
            "type": "object",
            "properties": {
@@ -3374,6 +3351,10 @@
                    "description": "计数数量",
                    "type": "number"
                },
                "locationId": {
                    "description": "位置id",
                    "type": "integer"
                },
                "operationId": {
                    "description": "出入库id",
                    "type": "integer"
docs/swagger.yaml
@@ -648,22 +648,6 @@
        description: 产品id
        type: string
    type: object
  request.AddLocationProductAmount:
    properties:
      Amount:
        description: 库存数量
        type: number
      adjustAmount:
        description: 差值
        type: number
      differenceAmount:
        description: 计数数量
        type: number
      locationId:
        type: integer
      productId:
        type: string
    type: object
  request.AddOperation:
    properties:
      comment:
@@ -1048,6 +1032,9 @@
      differenceAmount:
        description: 计数数量
        type: number
      locationId:
        description: 位置id
        type: integer
      operationId:
        description: 出入库id
        type: integer
@@ -1722,7 +1709,7 @@
        name: object
        required: true
        schema:
          $ref: '#/definitions/request.AddLocationProductAmount'
          $ref: '#/definitions/request.UpdateLocationProductAmount'
      produces:
      - application/json
      responses:
models/location_product_amount.go
@@ -30,7 +30,7 @@
    LocationProductAmountWithOperation struct {
        //LocationProductAmount LocationProductAmount `json:"locationProductAmount"`
        LocationProductAmountId int                      `json:"locationProductAmount" gorm:"location_product_amount_id"`
        LocationProductAmountId int                      `json:"locationProductAmountId" gorm:"location_product_amount_id"`
        LocationId              int                      `json:"locationId" gorm:"column:location_id"`
        LocationName            string                   `json:"locationName" gorm:"column:location_name"`
        ProductId               string                   `json:"productId" gorm:"column:product_id"`
request/location_product_amount.go
@@ -5,20 +5,21 @@
)
type AddLocationProductAmount struct {
    LocationId       int             `json:"locationId"`
    ProductId        string          `json:"productId"`
    Amount           decimal.Decimal `json:"Amount"`           //库存数量
    AdjustAmount     decimal.Decimal `json:"adjustAmount" `    //差值
    DifferenceAmount decimal.Decimal `json:"differenceAmount"` //计数数量
    Amount           decimal.Decimal `json:"Amount"`           //库存数量
    ProductId        string          `json:"productId"`
    LocationId       int             `json:"locationId"`
}
type UpdateLocationProductAmount struct {
    //LocationProductAmountId int             `json:"locationProductAmountId"` //库存盘点id
    AdjustAmount     decimal.Decimal `json:"adjustAmount" `    //差值
    DifferenceAmount decimal.Decimal `json:"differenceAmount"` //计数数量
    OperationId      int             `json:"operationId"`      //出入库id
    Amount           decimal.Decimal `json:"amount"`           //库存数量
    ProductId        string          `json:"productId"`        //产品id
    OperationId      int             `json:"operationId"`      //出入库id
    LocationId       int             `json:"locationId"`       //位置id
}
type GetRuleList struct {