lishihai
2024-07-03 91d7ca06128f996844aa7d2d691d083c944bdf1d
models/warehouse_month_stats.go
@@ -21,19 +21,20 @@
      BeginAmount decimal.Decimal `json:"beginAmount" gorm:"type:decimal(30,10);not null;comment:数量"` //期初数量
      EndAmount   decimal.Decimal `json:"amount" gorm:"type:decimal(30,10);not null;comment:数量"`      //期末结余数量
      InputAmount decimal.Decimal        `json:"inputAmount" gorm:"type:decimal(30,10);not null;comment:数量"` //入库数量
      InputItems  []*WarehouseStatsItems `json:"inputMoreUnitsArr"`                                          //入库明细
      InputAmount  decimal.Decimal        `json:"inputAmount" gorm:"type:decimal(30,10);not null;comment:数量"` //入库数量
      InputItems   []*WarehouseStatsItems `json:"inputItems" gorm:"-"`                                        //入库明细
      Items        []*WarehouseStatsItems `json:"-"`
      OutputAmount decimal.Decimal        `json:"outputAmount" gorm:"type:decimal(30,10);not null;comment:数量"` //出库数量
      OutputItems  []*WarehouseStatsItems `json:"outputMoreUnitsArr"`                                          //出库明细
      OutputItems  []*WarehouseStatsItems `json:"outputItems"  gorm:"-"`                                       //出库明细
      Date string `json:"date" gorm:"index;type:varchar(255); not null;default ''"` //日期 2024-04
   }
   WarehouseStatsItems struct {
      WarehouseMonthStatsId int             `json:"warehouseMonthStatsId"`
      Name                  string          `json:"name" gorm:"type:varchar(255);not null;default:''"` //入库来源,出库去处
      Amount                decimal.Decimal `json:"amount" gorm:"type:decimal(30,10);not null;"`       //数量
      WarehouseMonthStatsId int                 `json:"warehouseMonthStatsId"`
      Type                  MonthStatsItemsType `json:"type" gorm:"type:tinyint;not null;default:1"`
      Name                  string              `json:"name" gorm:"type:varchar(255);not null;default:''"` //入库来源,出库去处
      Amount                decimal.Decimal     `json:"amount" gorm:"type:decimal(30,10);not null;"`       //数量
   }
   WarehouseMonthStatsSearch struct {
@@ -48,8 +49,64 @@
   }
)
type MonthStatsItemsType int
const (
   MonthStatsItemsTypeInput  MonthStatsItemsType = 1 //入库
   MonthStatsItemsTypeOutput MonthStatsItemsType = 2 //出库
)
func (slf *WarehouseStatsItems) TableName() string {
   return "wms_warehouse_month_stats_items"
}
func (slf *WarehouseMonthStats) TableName() string {
   return "wms_month_stats"
   return "wms_warehouse_month_stats"
}
func (slf *WarehouseMonthStats) BeforeCreate(tx *gorm.DB) error {
   if len(slf.InputItems) != 0 || len(slf.OutputItems) != 0 {
      items := make([]*WarehouseStatsItems, 0, len(slf.InputItems)+len(slf.OutputItems))
      for _, item := range slf.InputItems {
         items = append(items, &WarehouseStatsItems{
            Type:   MonthStatsItemsTypeInput,
            Name:   item.Name,
            Amount: item.Amount,
         })
      }
      for _, item := range slf.OutputItems {
         items = append(items, &WarehouseStatsItems{
            Type:   MonthStatsItemsTypeOutput,
            Name:   item.Name,
            Amount: item.Amount,
         })
      }
      slf.Items = items
   }
   return nil
}
func (slf *WarehouseMonthStats) AfterFind(tx *gorm.DB) error {
   if len(slf.Items) != 0 {
      inputItems := make([]*WarehouseStatsItems, 0)
      outputItems := make([]*WarehouseStatsItems, 0)
      for _, v := range slf.Items {
         item := WarehouseStatsItems{
            Type:   v.Type,
            Name:   v.Name,
            Amount: v.Amount,
         }
         if v.Type == MonthStatsItemsTypeInput {
            inputItems = append(inputItems, &item)
         } else {
            outputItems = append(outputItems, &item)
         }
      }
   }
   return nil
}
func NewWarehouseMonthStatsSearch() *WarehouseMonthStatsSearch {
@@ -96,6 +153,21 @@
   return slf
}
func (slf *WarehouseMonthStatsSearch) SetWarehouseId(id int) *WarehouseMonthStatsSearch {
   slf.WarehouseId = id
   return slf
}
func (slf *WarehouseMonthStatsSearch) Save(record *WarehouseMonthStats) 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
}
func (slf *WarehouseMonthStatsSearch) build() *gorm.DB {
   var db = slf.Orm.Model(&WarehouseMonthStats{})
@@ -118,6 +190,14 @@
   if slf.Fields != "" {
      db = db.Select(slf.Fields)
   }
   if slf.WarehouseId != 0 {
      db = db.Where("warehouse_id = ?", slf.WarehouseId)
   }
   if slf.Preload {
      db = db.Preload("Items")
   }
   return db
@@ -279,6 +359,14 @@
   return m
}
func WarehouseStatsItemMap(records []*WarehouseStatsItems) (m map[string]*WarehouseStatsItems) {
   m = make(map[string]*WarehouseStatsItems, len(records))
   for _, record := range records {
      m[record.Name] = record
   }
   return m
}
func (slf *WarehouseMonthStatsSearch) Count() (int64, error) {
   var (
      total int64