jiangshuai
2023-10-26 be19d957b591ad27a47057929c4a8694f0776a1a
bug修改
11个文件已修改
476 ■■■■■ 已修改文件
controllers/location_product.go 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/location_product_amount.go 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/operation.go 226 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/product_controller.go 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/report_forms_controller.go 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/docs.go 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/swagger.json 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/swagger.yaml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/location_product.go 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/location_product_amount.go 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
request/location_product_amount.go 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/location_product.go
@@ -2,9 +2,7 @@
import (
    "github.com/gin-gonic/gin"
    "github.com/shopspring/decimal"
    "strconv"
    "time"
    "wms/extend/code"
    "wms/extend/util"
    "wms/models"
@@ -52,16 +50,6 @@
    //}
    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
@@ -163,7 +151,6 @@
        util.ResponseFormat(c, code.RequestParamError, "id为0")
        return
    }
    //TODO:此处可能需要增加限制,如果该上架规则如果已经产生了库存数量,删除会造成库存查不到的影响
    if err := models.NewLocationProductSearch().SetID(id).Delete(); err != nil {
        logx.Errorf("LocationProduct delete err: %v", err)
        util.ResponseFormat(c, code.SaveFail, "删除失败:"+err.Error())
controllers/location_product_amount.go
@@ -44,11 +44,9 @@
    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`).
        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("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)
        InnerJoins("inner join material on material.id=wms_location_product_amount.product_id").
        InnerJoins("inner join wms_location on wms_location.id=wms_location_product_amount.location_id")
    var (
        records = make([]*models.LocationProductAmountWithOperation, 0)
        total   int64
@@ -62,7 +60,7 @@
    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_location_product_amount.updated_at desc").Find(&records).Error; err != nil {
    if err := search.Orm.Order("wms_location_product_amount.updated_at desc").Find(&records).Error; err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
        util.ResponseFormat(c, code.RequestError, fmt.Errorf("find count err: %v", err))
        return
    }
@@ -127,25 +125,22 @@
        return errors.New("该商品在已选中的位置存在未验证的库存盘点信息,无法继续添加相关信息")
    }
    locProduct, err := models.NewLocationProductSearch().SetLocationId(reqParams.LocationId).SetProductId(reqParams.ProductId).First()
    if err != nil {
        return errors.New("参数异常,未找到该上架规则")
    }
    existAmount, err := models.NewLocationProductAmountSearch().SetLocationProductId(locProduct.Id).First()
    if err != nil {
        return err
    existAmount, res := models.NewLocationProductAmountSearch().SetLocationId(reqParams.LocationId).SetProductId(reqParams.ProductId).FirstRes()
    if res.Error != nil && !errors.Is(res.Error, gorm.ErrRecordNotFound) {
        return res.Error
    }
    location, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeAdjust)).First()
    if err != nil {
        return err
    }
    //reqParams.AdjustAmount = reqParams.Amount.Sub(reqParams.DifferenceAmount)
    reqParams.AdjustAmount = reqParams.DifferenceAmount.Sub(reqParams.Amount)
    var locAmount models.LocationProductAmount
    if existAmount.Id == 0 {
    if res.Error != nil && errors.Is(res.Error, gorm.ErrRecordNotFound) {
        locAmount = models.LocationProductAmount{
            LocationProductId: locProduct.Id,
            LocationId: reqParams.LocationId,
            //TODO:此处新增了ProductCategoryId入参,目前不清楚这个值的来源
            ProductCategoryID: reqParams.ProductCategoryId,
            ProductId:         reqParams.ProductId,
            Amount:            decimal.NewFromInt(0),
            CreateDate:        time.Now().Format("2006-01-02 15:04:05"),
        }
controllers/operation.go
@@ -314,7 +314,7 @@
        util.ResponseFormat(c, code.RequestParamError, "id为0")
        return
    }
    operation, err := models.NewOperationSearch().SetID(id).First()
    operation, err := models.NewOperationSearch().SetPreload(true).SetID(id).First()
    if err != nil {
        util.ResponseFormat(c, code.RequestParamError, "未找到相关出入库信息:"+err.Error())
        return
@@ -323,17 +323,12 @@
        util.ResponseFormat(c, code.RequestError, "该出入库信息无法完成")
        return
    }
    operationType, err := models.NewOperationTypeSearch().SetID(uint(operation.OperationTypeId)).First()
    if err != nil {
        util.ResponseFormat(c, code.RequestError, err.Error())
        return
    }
    if err := models.WithTransaction(func(tx *gorm.DB) error {
        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)
@@ -345,96 +340,175 @@
            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 {
        if operation.BaseOperationType == constvar.BaseOperationTypeIncoming {
            operationInputs := []*models.Operation{}
            for k, v := range listProdt {
                if value, ok := mapProdt[v.ID]; !ok {
                value, ok := mapProdt[v.ID]
                if !ok {
                    return errors.New("产品种类异常")
                } else {
                    listProdt[k].Amount = listProdt[k].Amount.Add(value)
                    if err := tx.Save(listProdt[k]).Error; err != nil {
                        return err
                }
                listProdt[k].Amount = listProdt[k].Amount.Add(value)
                if err := tx.Save(listProdt[k]).Error; err != nil {
                    return err
                }
                locationRule, err := models.NewLocationProductSearch().SetProductId(v.ID).SetAreaId(operation.ToLocationID).First()
                if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
                    return err
                }
                if err == nil {
                    operationTransfer := &models.Operation{
                        Number:            operation.Number,
                        SourceNumber:      operation.SourceNumber,
                        OperationTypeId:   operation.OperationTypeId,
                        OperationTypeName: operation.OperationTypeName,
                        Status:            constvar.OperationStatus_Finish,
                        FromLocationID:    locationRule.AreaId,
                        ToLocationID:      locationRule.LocationId,
                        OperationDate:     operation.OperationDate,
                        ContacterID:       operation.ContacterID,
                        ContacterName:     operation.ContacterName,
                        CompanyID:         operation.CompanyID,
                        CompanyName:       operation.CompanyName,
                        Comment:           operation.Comment,
                        BaseOperationType: operation.BaseOperationType,
                        Details: []*models.OperationDetails{
                            &models.OperationDetails{
                                ProductId: v.ID,
                                Amount:    value,
                            },
                        },
                    }
                    operationTransfer.Id = 0
                    operationTransfer.FromLocationID = locationRule.AreaId
                    operationTransfer.ToLocationID = locationRule.LocationId
                    operationTransfer.Status = constvar.OperationStatus_Finish
                    operationTransfer.Details = []*models.OperationDetails{
                        &models.OperationDetails{
                            ProductId: v.ID,
                            Amount:    value,
                        },
                    }
                    operationInputs = append(operationInputs, operationTransfer)
                    //if err := tx.Create(&operationTransfer).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 {
                    locAmount, err := models.NewLocationProductAmountSearch().
                        SetProductId(v.ID).
                        SetLocationId(locationRule.LocationId).
                        First()
                    if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
                        return err
                    }
                    locAmount.LocationId = locationRule.LocationId
                    locAmount.ProductId = v.ID
                    locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05")
                    locAmount.Amount = locAmount.Amount.Add(value)
                    if err := models.NewLocationProductAmountSearch().SetID(locAmount.Id).Update(&locAmount); err != nil {
                        return err
                    if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
                        return res.Error
                    }
                }
            }
        }
        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 {
                    locAmount, err := models.NewLocationProductAmountSearch().
                        SetProductId(v.ID).
                        SetLocationId(operation.ToLocationID).
                        First()
                    if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
                        return err
                    }
                    if fromAmount.Amount.LessThan(value) {
                        return errors.New(fmt.Sprintf("产品:%v,库存:%v,调拨:%v,数量不够,无法完成调拨操作", v.Name, v.Amount.String(), value.String()))
                    locAmount.LocationId = operation.ToLocationID
                    locAmount.ProductId = v.ID
                    locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05")
                    locAmount.Amount = locAmount.Amount.Add(value)
                    if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil {
                        return res.Error
                    }
                    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
                    }
                }
            }
            if len(operationInputs) > 0 {
                if err := tx.Create(&operationInputs).Error; err != nil {
                    return err
                }
            }
        }
        //}
        if operation.BaseOperationType == constvar.BaseOperationTypeOutgoing {
            for k, v := range listProdt {
                value, ok := mapProdt[v.ID]
                if !ok {
                    return errors.New("产品种类异常")
                }
                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
                }
                locAmount, res := models.NewLocationProductAmountSearch().
                    SetProductId(v.ID).
                    SetLocationId(operation.ToLocationID).
                    FirstRes()
                if res.Error != 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 operation.BaseOperationType == constvar.BaseOperationTypeInternal {
            for _, v := range listProdt {
                value, ok := mapProdt[v.ID]
                if !ok {
                    return errors.New("产品种类异常")
                }
                //listProdt[k].Amount = listProdt[k].Amount.Add(value)
                //if err := tx.Save(listProdt[k]).Error; err != nil {
                //    return err
                //}
                fromLocAmount, res := models.NewLocationProductAmountSearch().
                    SetProductId(v.ID).
                    SetLocationId(operation.FromLocationID).
                    FirstRes()
                if res.Error != nil {
                    return err
                }
                if fromLocAmount.Amount.LessThan(value) {
                    return errors.New(fmt.Sprintf("产品:%v,库存:%v,调拨:%v,数量不够,无法完成调拨操作", v.Name, v.Amount.String(), value.String()))
                }
                fromLocAmount.Amount = fromLocAmount.Amount.Sub(value)
                if err := models.NewLocationProductAmountSearch().SetID(fromLocAmount.Id).Update(fromLocAmount); err != nil {
                    return err
                }
                toLocAmount, res := models.NewLocationProductAmountSearch().
                    SetProductId(v.ID).
                    SetLocationId(operation.ToLocationID).
                    FirstRes()
                if res.Error != nil {
                    return err
                }
                toLocAmount.Amount = toLocAmount.Amount.Add(value)
                if err := models.NewLocationProductAmountSearch().SetID(toLocAmount.Id).Update(toLocAmount); err != nil {
                    return err
                }
            }
        }
        return nil
    }); err != nil {
        util.ResponseFormat(c, code.RequestError, err.Error())
controllers/product_controller.go
@@ -475,19 +475,35 @@
                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 {
                //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
                //}
                locAmount, res := models.NewLocationProductAmountSearch().
                    SetProductId(v.ID).
                    SetLocationId(operation.ToLocationID).
                    FirstRes()
                if res.Error != nil {
                    return err
                }
                if locAmount.Amount.LessThan(value) {
                    return errors.New(fmt.Sprintf("产品:%v,库存:%v,出库:%v,数量不够,无法完成出库操作", v.Name, v.Amount.String(), value.String()))
                    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 {
                if err := models.NewLocationProductAmountSearch().SetID(locAmount.Id).Update(locAmount); err != nil {
                    return err
                }
            }
controllers/report_forms_controller.go
@@ -183,10 +183,7 @@
        util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
        return
    }
    search := models.NewLocationProductSearch()
    if params.PageInfo.Check() {
        search.SetPage(params.Page, params.PageSize)
    }
    //查询位置
    locations, err := models.NewLocationSearch().SetJointName(params.WareHouseCode).FindAll()
    if err != nil {
@@ -198,36 +195,24 @@
        ids = append(ids, location.Id)
    }
    find, total, err := search.SetKeyword(params.KeyWord).SetProductId(params.ProductId).SetLocationIds(ids).FindByPage()
    if err != nil {
        util.ResponseFormat(c, code.RequestParamError, "查询上架规则失败")
        return
    }
    ruleIds := make([]int, 0)
    for _, product := range find {
        ruleIds = append(ruleIds, product.Id)
    }
    amounts, err := models.NewLocationProductAmountSearch().SetLocationProductIds(ruleIds).Find()
    amounts, total, err := models.NewLocationProductAmountSearch().SetPage(params.Page, params.PageSize).SetPreload(true).SetKeyword(params.KeyWord).SetProductId(params.ProductId).SetLocationIds(ids).FindByPage()
    if err != nil {
        util.ResponseFormat(c, code.RequestParamError, "查询数量失败")
        return
    }
    var result []response.LocationForms
    for _, product := range find {
    for _, amount := range amounts {
        var resp response.LocationForms
        for _, amount := range amounts {
            if product.Id == amount.LocationProductId {
                resp.Amount = amount.Amount
                break
            }
        }
        resp.LocationName = product.Location.Name
        resp.ProduceId = product.Product.ID
        resp.ProductName = product.Product.Name
        resp.ProductTypeName = product.ProductCategory.Name
        resp.Unit = product.Product.Unit
        resp.Value = resp.Amount.Mul(product.Product.Cost)
        resp.Amount = amount.Amount
        resp.LocationName = amount.Location.Name
        resp.ProduceId = amount.Product.ID
        resp.ProductName = amount.Product.Name
        resp.ProductTypeName = amount.ProductCategory.Name
        resp.Unit = amount.Product.Unit
        resp.Value = resp.Amount.Mul(amount.Product.Cost)
        result = append(result, resp)
    }
    util.ResponseFormatList(c, code.Success, result, int(total))
}
docs/docs.go
@@ -3086,6 +3086,14 @@
        "request.GetInventoryHistory": {
            "type": "object",
            "properties": {
                "baseOperationType": {
                    "description": "基础作业类型",
                    "allOf": [
                        {
                            "$ref": "#/definitions/constvar.BaseOperationType"
                        }
                    ]
                },
                "keyWord": {
                    "description": "搜索条件",
                    "type": "string"
@@ -3406,6 +3414,10 @@
                    "description": "出入库id",
                    "type": "integer"
                },
                "productCategoryId": {
                    "description": "产品种类id",
                    "type": "integer"
                },
                "productId": {
                    "description": "产品id",
                    "type": "string"
docs/swagger.json
@@ -3074,6 +3074,14 @@
        "request.GetInventoryHistory": {
            "type": "object",
            "properties": {
                "baseOperationType": {
                    "description": "基础作业类型",
                    "allOf": [
                        {
                            "$ref": "#/definitions/constvar.BaseOperationType"
                        }
                    ]
                },
                "keyWord": {
                    "description": "搜索条件",
                    "type": "string"
@@ -3394,6 +3402,10 @@
                    "description": "出入库id",
                    "type": "integer"
                },
                "productCategoryId": {
                    "description": "产品种类id",
                    "type": "integer"
                },
                "productId": {
                    "description": "产品id",
                    "type": "string"
docs/swagger.yaml
@@ -820,6 +820,10 @@
    type: object
  request.GetInventoryHistory:
    properties:
      baseOperationType:
        allOf:
        - $ref: '#/definitions/constvar.BaseOperationType'
        description: 基础作业类型
      keyWord:
        description: 搜索条件
        type: string
@@ -1044,6 +1048,9 @@
      operationId:
        description: 出入库id
        type: integer
      productCategoryId:
        description: 产品种类id
        type: integer
      productId:
        description: 产品id
        type: string
models/location_product.go
@@ -85,6 +85,11 @@
    return slf
}
func (slf *LocationProductSearch) SetAreaId(areaId int) *LocationProductSearch {
    slf.AreaId = areaId
    return slf
}
func (slf *LocationProductSearch) build() *gorm.DB {
    var db = slf.Orm.Model(&LocationProduct{})
@@ -119,6 +124,10 @@
    if len(slf.LocationIds) > 0 {
        db = db.Where("location_id in (?)", slf.LocationIds)
    }
    if slf.AreaId != 0 {
        db = db.Where("area_id = ?", slf.AreaId)
    }
    return db
@@ -206,3 +215,11 @@
    return records, nil
}
func (slf *LocationProductSearch) FirstRes() (*LocationProduct, *gorm.DB) {
    var (
        record = new(LocationProduct)
        db     = slf.build()
    )
    return record, db.First(record)
}
models/location_product_amount.go
@@ -11,22 +11,29 @@
type (
    LocationProductAmount struct {
        WmsModel
        Id                int             `json:"id"  gorm:"column:id;primary_key;AUTO_INCREMENT"`
        LocationProductId int             `json:"locationProductId" gorm:"type:int;not null;comment:上架规则id"` //上架规则id
        LocationProduct   LocationProduct `json:"locationProduct" gorm:"foreignKey:LocationProductId;references:Id"`
        Id int `json:"id"  gorm:"column:id;primary_key;AUTO_INCREMENT"`
        //LocationProductId int             `json:"locationProductId" gorm:"type:int;not null;comment:上架规则id"` //上架规则id
        //LocationProduct   LocationProduct `json:"locationProduct" gorm:"foreignKey:LocationProductId;references:Id"`
        LocationId        int             `json:"locationId" gorm:"type:int;not null;comment:位置id"` //位置id
        Location          Location        `json:"location" gorm:"foreignKey:LocationId;references:id"`
        ProductCategoryID int             `json:"productCategoryId" gorm:"type:int;not null;comment:产品种类id"` //产品种类id
        ProductCategory   ProductCategory `json:"productCategory"`
        ProductId         string          `json:"productId" gorm:"type:varchar(191);not null;comment:产品id"` //产品id
        Product           Material        `json:"product" gorm:"foreignKey:ProductId;references:ID"`
        Amount            decimal.Decimal `json:"amount" gorm:"type:decimal(20,2);not null;comment:库存数量"` //库存数量
        CreateDate        string          `json:"createDate" gorm:"type:varchar(63);comment:日期"`          //日期
    }
    LocationProductAmountSearch struct {
        LocationProductAmount
        Order              string
        PageNum            int
        PageSize           int
        Keyword            string
        Orm                *gorm.DB
        Preload            bool
        LocationProductIds []int
        Order    string
        PageNum  int
        PageSize int
        Keyword  string
        Orm      *gorm.DB
        Preload  bool
        //LocationProductIds []int
        LocationIds []int
    }
    LocationProductAmountWithOperation struct {
@@ -85,13 +92,23 @@
    return slf
}
func (slf *LocationProductAmountSearch) SetLocationProductId(id int) *LocationProductAmountSearch {
    slf.LocationProductId = id
func (slf *LocationProductAmountSearch) SetProductId(productId string) *LocationProductAmountSearch {
    slf.ProductId = productId
    return slf
}
func (slf *LocationProductAmountSearch) SetLocationProductIds(ids []int) *LocationProductAmountSearch {
    slf.LocationProductIds = ids
func (slf *LocationProductAmountSearch) SetLocationId(locationId int) *LocationProductAmountSearch {
    slf.LocationId = locationId
    return slf
}
//func (slf *LocationProductAmountSearch) SetLocationProductIds(ids []int) *LocationProductAmountSearch {
//    slf.LocationProductIds = ids
//    return slf
//}
func (slf *LocationProductAmountSearch) SetLocationIds(ids []int) *LocationProductAmountSearch {
    slf.LocationIds = ids
    return slf
}
@@ -110,13 +127,25 @@
    }
    if slf.Preload {
        db = db.Model(&LocationProductAmount{}).Preload("LocationProduct").Preload("LocationProduct.Location").Preload("LocationProduct.Product")
        db = db.Model(&LocationProductAmount{}).Preload("Location").Preload("Product").Preload("ProductCategory")
    }
    if slf.LocationProductId != 0 {
        db = db.Where("location_product_id=?", slf.LocationProductId)
    //if slf.LocationProductId != 0 {
    //    db = db.Where("location_product_id=?", slf.LocationProductId)
    //}
    //if len(slf.LocationProductIds) > 0 {
    //    db = db.Where("location_product_id in (?)", slf.LocationProductIds)
    //}
    if len(slf.LocationIds) > 0 {
        db = db.Where("location_id in (?)", slf.LocationIds)
    }
    if len(slf.LocationProductIds) > 0 {
        db = db.Where("location_product_id in (?)", slf.LocationProductIds)
    if slf.LocationId != 0 {
        db = db.Where("location_id = ?", slf.LocationId)
    }
    if slf.ProductId != "" {
        db = db.Where("product_id=?", slf.ProductId)
    }
    return db
@@ -204,3 +233,12 @@
    return records, nil
}
func (slf *LocationProductAmountSearch) FirstRes() (*LocationProductAmount, *gorm.DB) {
    var (
        record = new(LocationProductAmount)
        db     = slf.build()
    )
    return record, db.First(&record)
}
request/location_product_amount.go
@@ -14,12 +14,13 @@
type UpdateLocationProductAmount struct {
    //LocationProductAmountId int             `json:"locationProductAmountId"` //库存盘点id
    AdjustAmount     decimal.Decimal `json:"adjustAmount" `    //差值
    DifferenceAmount decimal.Decimal `json:"differenceAmount"` //计数数量
    Amount           decimal.Decimal `json:"amount"`           //库存数量
    ProductId        string          `json:"productId"`        //产品id
    OperationId      int             `json:"operationId"`      //出入库id
    LocationId       int             `json:"locationId"`       //位置id
    AdjustAmount      decimal.Decimal `json:"adjustAmount" `     //差值
    DifferenceAmount  decimal.Decimal `json:"differenceAmount"`  //计数数量
    Amount            decimal.Decimal `json:"amount"`            //库存数量
    ProductId         string          `json:"productId"`         //产品id
    OperationId       int             `json:"operationId"`       //出入库id
    LocationId        int             `json:"locationId"`        //位置id
    ProductCategoryId int             `json:"productCategoryId"` //产品种类id
}
type GetRuleList struct {