zhangqian
2024-07-04 c950586b718ae6fc198bedf424609a4ac94cb5d1
models/operation_details.go
@@ -4,6 +4,7 @@
   "fmt"
   "github.com/shopspring/decimal"
   "gorm.io/gorm"
   "wms/constvar"
   "wms/pkg/mysqlx"
)
@@ -11,9 +12,10 @@
   // OperationDetails 操作明细表
   OperationDetails struct {
      WmsModel
      Id          int    `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
      OperationID int    `json:"operationId" gorm:"type:int;not null;comment:操作记录id"`      //操作id
      ProductId   string `json:"productId" gorm:"type:varchar(191);not null;comment:产品id"` //产品id
      Id                int                        `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
      OperationID       int                        `json:"operationId" gorm:"index;type:int;not null;comment:操作记录id"`     //操作id
      BaseOperationType constvar.BaseOperationType `json:"baseOperationType" gorm:"type:tinyint;not null;comment:基础作业类型"` //基础作业类型
      ProductId         string                     `json:"productId" gorm:"type:varchar(191);not null;comment:产品id"`      //产品id
      //ProductName string          `json:"productName" gorm:"type:varchar(255);not null;comment:产品名称"` //产品名称
      Amount decimal.Decimal `json:"amount" gorm:"type:decimal(20,2);not null;comment:数量"` //数量
      //Unit        string          `json:"unit" gorm:"type:varchar(31);comment:单位"`                    //单位
@@ -25,16 +27,26 @@
      ToLocation       Location        `json:"toLocation"      gorm:"foreignKey:ToLocationID;references:Id"`    //目标位置
      TotalGrossWeight decimal.Decimal `json:"totalGrossWeight" gorm:"type:decimal(20,3);comment:总毛重"`
      TotalNetWeight   decimal.Decimal `json:"totalNetWeight" gorm:"type:decimal(20,3);comment:总净重"`
      AuxiliaryAmount  decimal.Decimal `json:"auxiliaryAmount" gorm:"type:decimal(20,3);comment:辅助数量"`
      AuxiliaryUnit    string          `json:"auxiliaryUnit" gorm:"type:varchar(191);comment:辅助单位"`
      Remark           string          `gorm:"type:varchar(1024);comment:备注" json:"remark"`
      IsInternalOutput bool            `json:"isInternalOutput"` //是否调拨产生的出库
      DealerType       string          `json:"dealerType"`       //出入库类型
      Cost      decimal.Decimal `json:"cost" `      //成本单价
      SalePrice decimal.Decimal `json:"salePrice" ` //销售单价
   }
   OperationDetailsSearch struct {
      OperationDetails
      Order    string
      PageNum  int
      PageSize int
      Keyword  string
      Orm      *gorm.DB
      Preload  bool
      Order        string
      PageNum      int
      PageSize     int
      Keyword      string
      Orm          *gorm.DB
      Preload      bool
      OperationIDs []int
      Fields       string
   }
)
@@ -81,8 +93,23 @@
   return slf
}
func (slf *OperationDetailsSearch) SetOperationIds(operationIds []int) *OperationDetailsSearch {
   slf.OperationIDs = operationIds
   return slf
}
func (slf *OperationDetailsSearch) SetFields(fields string) *OperationDetailsSearch {
   slf.Fields = fields
   return slf
}
func (slf *OperationDetailsSearch) SetProductId(productId string) *OperationDetailsSearch {
   slf.ProductId = productId
   return slf
}
func (slf *OperationDetailsSearch) SetBaseOperationType(baseOperationType constvar.BaseOperationType) *OperationDetailsSearch {
   slf.BaseOperationType = baseOperationType
   return slf
}
@@ -109,6 +136,18 @@
   }
   if slf.Preload {
      db = db.Preload("Product")
   }
   if len(slf.OperationIDs) > 0 {
      db = db.Where("operation_id in ?", slf.OperationIDs)
   }
   if slf.Fields != "" {
      db = db.Select(slf.Fields)
   }
   if slf.BaseOperationType != 0 {
      db = db.Where("base_operation_type = ?", slf.BaseOperationType)
   }
   return db
@@ -274,3 +313,31 @@
   return records, nil
}
func (slf *OperationDetailsSearch) 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
}
type GroupByDealerTypeWarehouse struct {
   DealerType string
   ProductID  string
   Sum        decimal.Decimal
}
func (slf *OperationDetailsSearch) GroupMultiSumAmount() ([]*GroupByDealerTypeWarehouse, error) {
   var (
      db     = slf.build()
      result = make([]*GroupByDealerTypeWarehouse, 0)
   )
   if err := db.Select("sum(amount) as sum, dealer_type, product_id").Group("product_id, dealer_type").Scan(&result).Error; err != nil {
      return nil, fmt.Errorf("select group err: %v", err)
   }
   return result, nil
}