| | |
| | | |
| | | import ( |
| | | "github.com/gin-gonic/gin" |
| | | "github.com/shopspring/decimal" |
| | | "strconv" |
| | | "time" |
| | | "wms/extend/code" |
| | | "wms/extend/util" |
| | | "wms/models" |
| | |
| | | //} |
| | | |
| | | if err := models.NewLocationProductSearch().Create(¶ms); 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.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()) |
| | |
| | | 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 |
| | |
| | | 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 |
| | | } |
| | |
| | | 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"), |
| | | } |
| | |
| | | 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 |
| | |
| | | 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) |
| | |
| | | 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()) |
| | |
| | | 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 |
| | | } |
| | | } |
| | |
| | | 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 { |
| | |
| | | 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)) |
| | | } |
| | |
| | | "request.GetInventoryHistory": { |
| | | "type": "object", |
| | | "properties": { |
| | | "baseOperationType": { |
| | | "description": "基础作业类型", |
| | | "allOf": [ |
| | | { |
| | | "$ref": "#/definitions/constvar.BaseOperationType" |
| | | } |
| | | ] |
| | | }, |
| | | "keyWord": { |
| | | "description": "搜索条件", |
| | | "type": "string" |
| | |
| | | "description": "出入库id", |
| | | "type": "integer" |
| | | }, |
| | | "productCategoryId": { |
| | | "description": "产品种类id", |
| | | "type": "integer" |
| | | }, |
| | | "productId": { |
| | | "description": "产品id", |
| | | "type": "string" |
| | |
| | | "request.GetInventoryHistory": { |
| | | "type": "object", |
| | | "properties": { |
| | | "baseOperationType": { |
| | | "description": "基础作业类型", |
| | | "allOf": [ |
| | | { |
| | | "$ref": "#/definitions/constvar.BaseOperationType" |
| | | } |
| | | ] |
| | | }, |
| | | "keyWord": { |
| | | "description": "搜索条件", |
| | | "type": "string" |
| | |
| | | "description": "出入库id", |
| | | "type": "integer" |
| | | }, |
| | | "productCategoryId": { |
| | | "description": "产品种类id", |
| | | "type": "integer" |
| | | }, |
| | | "productId": { |
| | | "description": "产品id", |
| | | "type": "string" |
| | |
| | | type: object |
| | | request.GetInventoryHistory: |
| | | properties: |
| | | baseOperationType: |
| | | allOf: |
| | | - $ref: '#/definitions/constvar.BaseOperationType' |
| | | description: 基础作业类型 |
| | | keyWord: |
| | | description: 搜索条件 |
| | | type: string |
| | |
| | | operationId: |
| | | description: 出入库id |
| | | type: integer |
| | | productCategoryId: |
| | | description: 产品种类id |
| | | type: integer |
| | | productId: |
| | | description: 产品id |
| | | type: string |
| | |
| | | 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{}) |
| | | |
| | |
| | | |
| | | 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 |
| | |
| | | |
| | | return records, nil |
| | | } |
| | | |
| | | func (slf *LocationProductSearch) FirstRes() (*LocationProduct, *gorm.DB) { |
| | | var ( |
| | | record = new(LocationProduct) |
| | | db = slf.build() |
| | | ) |
| | | return record, db.First(record) |
| | | } |
| | |
| | | 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 { |
| | |
| | | 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 |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | 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 |
| | |
| | | |
| | | return records, nil |
| | | } |
| | | |
| | | func (slf *LocationProductAmountSearch) FirstRes() (*LocationProductAmount, *gorm.DB) { |
| | | var ( |
| | | record = new(LocationProductAmount) |
| | | db = slf.build() |
| | | ) |
| | | |
| | | return record, db.First(&record) |
| | | } |
| | |
| | | |
| | | 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 { |