From 73b6baf6af3d88cdcb0e2df7932a9bd96b0b85c5 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期一, 01 七月 2024 22:32:34 +0800 Subject: [PATCH] 月度统计出入库按类型汇总报表定时任务和手动跑任务接口 --- models/location_product_amount.go | 173 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 152 insertions(+), 21 deletions(-) diff --git a/models/location_product_amount.go b/models/location_product_amount.go index cb890e2..d4990b1 100644 --- a/models/location_product_amount.go +++ b/models/location_product_amount.go @@ -11,9 +11,15 @@ 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" 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:搴撳瓨鏁伴噺"` //搴撳瓨鏁伴噺 CreateDate string `json:"createDate" gorm:"type:varchar(63);comment:鏃ユ湡"` //鏃ユ湡 } @@ -26,22 +32,30 @@ Keyword string Orm *gorm.DB Preload bool + //LocationProductIds []int + LocationIds []int + ProductIds []string + Ids []int + Query string } LocationProductAmountWithOperation struct { //LocationProductAmount LocationProductAmount `json:"locationProductAmount"` - LocationProductAmountId int `json:"locationProductAmountId" gorm:"location_product_amount_id"` - LocationId int `json:"locationId" gorm:"column:location_id"` - LocationName string `json:"locationName" gorm:"column:location_name"` - ProductId string `json:"productId" gorm:"column:product_id"` - ProductName string `json:"productName" gorm:"column:product_name"` - Amount decimal.Decimal `json:"amount" gorm:"column:amount"` - 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:"-"` - OperationId int `json:"operationId" gorm:"column:operation_id"` - Status constvar.OperationStatus `json:"status" gorm:"status"` + LocationProductAmountId int `json:"locationProductAmountId" gorm:"location_product_amount_id"` + LocationId int `json:"locationId" gorm:"column:location_id"` + LocationName string `json:"locationName" gorm:"column:location_name"` + 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:"-"` //璁℃暟鏁伴噺 + 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"` //閲嶉噺 } ) @@ -73,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 @@ -83,8 +102,28 @@ 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) SetLocationId(locationId int) *LocationProductAmountSearch { + slf.LocationId = locationId + return slf +} + +func (slf *LocationProductAmountSearch) SetProductIds(ids []string) *LocationProductAmountSearch { + slf.ProductIds = ids + return slf +} + +func (slf *LocationProductAmountSearch) SetLocationIds(ids []int) *LocationProductAmountSearch { + slf.LocationIds = ids + return slf +} + +func (slf *LocationProductAmountSearch) SetQuery(query string) *LocationProductAmountSearch { + slf.Query = query return slf } @@ -99,14 +138,41 @@ } if slf.Keyword != "" { - db = db.Where("product_name like ?", fmt.Sprintf("%%%v%%", slf.Keyword)) + db = db.Joins("left join wms_location on wms_location_product_amount.location_id = wms_location.id"). + Joins("left join material on wms_location_product_amount.product_id = material.id"). + Joins("left join wms_product_category on wms_location_product_amount.product_category_id = wms_product_category.id"). + Where("wms_location.name like ?", "%"+slf.Keyword+"%").Or("material.name like ?", "%"+slf.Keyword+"%"). + Or("wms_product_category.name like ?", "%"+slf.Keyword+"%") } 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.ProductIds) > 0 { + db = db.Where("product_id in (?)", slf.ProductIds) + } + + if len(slf.LocationIds) > 0 { + db = db.Where("location_id in (?)", slf.LocationIds) + } + + if slf.LocationId != 0 { + db = db.Where("location_id = ?", slf.LocationId) + } + + 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 @@ -188,9 +254,74 @@ 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) } return records, nil } + +func (slf *LocationProductAmountSearch) FirstRes() (*LocationProductAmount, *gorm.DB) { + var ( + record = new(LocationProductAmount) + db = slf.build() + ) + + 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 +} -- Gitblit v1.8.0