zhangqian
2024-07-01 73b6baf6af3d88cdcb0e2df7932a9bd96b0b85c5
models/location_product_amount.go
@@ -17,7 +17,7 @@
      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" gorm:"foreignKey:ProductCategoryID;references:ID"`
      ProductCategory   ProductCategory `json:"productCategory" gorm:"foreignKey:ProductCategoryID;references:Id"`
      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:库存数量"` //库存数量
@@ -35,6 +35,8 @@
      //LocationProductIds []int
      LocationIds []int
      ProductIds  []string
      Ids         []int
      Query       string
   }
   LocationProductAmountWithOperation struct {
@@ -45,13 +47,15 @@
      ProductId               string                     `json:"productId" gorm:"column:product_id"`
      ProductName             string                     `json:"productName" gorm:"column:product_name"`
      Amount                  decimal.Decimal            `json:"amount" gorm:"column:amount"`
      AmountMoreUnits         []UnitItems                `json:"amountMoreUnits" gorm:"-"` //在库数量多单位
      Unit                    string                     `json:"unit" gorm:"column:unit"`
      CreateDate              string                     `json:"createDate" gorm:"column:create_date"`
      AdjustAmount            decimal.Decimal            `json:"adjustAmount" gorm:"column:adjust_amount"`
      DifferenceAmount        decimal.Decimal            `json:"differenceAmount" gorm:"-"`
      AdjustAmount            decimal.Decimal            `json:"adjustAmount" gorm:"column:adjust_amount"` //差值
      DifferenceAmount        decimal.Decimal            `json:"differenceAmount" gorm:"-"`                //计数数量
      OperationId             int                        `json:"operationId" gorm:"column:operation_id"`
      Status                  constvar.OperationStatus   `json:"status" gorm:"status"`
      BaseOperationType       constvar.BaseOperationType `json:"baseOperationType" gorm:"base_operation_type"`
      Weight                  decimal.Decimal            `gorm:"type:decimal(20,3);comment:重量" json:"weight"` //重量
   }
)
@@ -83,6 +87,11 @@
   return slf
}
func (slf *LocationProductAmountSearch) SetIds(ids []int) *LocationProductAmountSearch {
   slf.Ids = ids
   return slf
}
func (slf *LocationProductAmountSearch) SetKeyword(keyword string) *LocationProductAmountSearch {
   slf.Keyword = keyword
   return slf
@@ -110,6 +119,11 @@
func (slf *LocationProductAmountSearch) SetLocationIds(ids []int) *LocationProductAmountSearch {
   slf.LocationIds = ids
   return slf
}
func (slf *LocationProductAmountSearch) SetQuery(query string) *LocationProductAmountSearch {
   slf.Query = query
   return slf
}
@@ -151,6 +165,14 @@
   if slf.ProductId != "" {
      db = db.Where("product_id=?", slf.ProductId)
   }
   if len(slf.Ids) > 0 {
      db = db.Where("id in (?)", slf.Ids)
   }
   if slf.Query != "" {
      db = db.Where(slf.Query)
   }
   return db
@@ -232,6 +254,9 @@
      db      = slf.build()
   )
   if slf.PageNum*slf.PageSize > 0 {
      db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
   }
   if err := db.Find(&records).Error; err != nil {
      return records, fmt.Errorf("find records err: %v", err)
   }
@@ -247,3 +272,56 @@
   return record, db.First(&record)
}
func (slf *LocationProductAmountSearch) Count() (int64, error) {
   var (
      total int64
      db    = slf.build()
   )
   err := db.Count(&total).Error
   return total, err
}
func (slf *LocationProductAmountSearch) UpdateByMap(upMap map[string]interface{}) error {
   var (
      db = slf.build()
   )
   if err := db.Updates(upMap).Error; err != nil {
      return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap)
   }
   return nil
}
func (slf *LocationProductAmountSearch) GroupCount(field string) ([]*GroupCount, error) {
   var (
      db     = slf.build()
      result = make([]*GroupCount, 0)
   )
   if err := db.Select("count(*) as total, " + field + " as class").Group(field).Scan(&result).Error; err != nil {
      return nil, fmt.Errorf("select group err: %v", err)
   }
   return result, nil
}
func (slf *LocationProductAmountSearch) GroupSum(groupField string, sumField string) ([]*GroupSum, error) {
   var (
      db     = slf.build()
      result = make([]*GroupSum, 0)
   )
   if err := db.Select("sum(" + sumField + ") as sum, " + groupField + " as class").Group(groupField).Scan(&result).Error; err != nil {
      return nil, fmt.Errorf("select group err: %v", err)
   }
   return result, nil
}
func (slf *LocationProductAmountSearch) Save(record *LocationProductAmount) error {
   var db = slf.build()
   if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
      return fmt.Errorf("save err: %v, record: %+v", err, record)
   }
   return nil
}