From c950586b718ae6fc198bedf424609a4ac94cb5d1 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期四, 04 七月 2024 18:16:07 +0800
Subject: [PATCH] 增加根据位置或仓库查询产品及库存列表

---
 models/operation_details.go |  125 +++++++++++++++++++++++++++++++++++------
 1 files changed, 105 insertions(+), 20 deletions(-)

diff --git a/models/operation_details.go b/models/operation_details.go
index 73d359e..c596a44 100644
--- a/models/operation_details.go
+++ b/models/operation_details.go
@@ -4,6 +4,7 @@
 	"fmt"
 	"github.com/shopspring/decimal"
 	"gorm.io/gorm"
+	"wms/constvar"
 	"wms/pkg/mysqlx"
 )
 
@@ -11,23 +12,41 @@
 	// OperationDetails 鎿嶄綔鏄庣粏琛�
 	OperationDetails struct {
 		WmsModel
+		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:鍗曚綅"`                    //鍗曚綅
+		Product Material `json:"product" gorm:"foreignKey:ProductId;references:ID"`
 
-		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
-		ProductName string          `json:"productName" gorm:"type:varchar(255);not null;comment:浜у搧鍚嶇О"` //浜у搧鍚嶇О
-		Quantity    decimal.Decimal `json:"quantity" gorm:"type:decimal(20,2);not null;comment:鏁伴噺"`     //鏁伴噺
-		Unit        string          `json:"unit" gorm:"type:varchar(31);comment:鍗曚綅"`
+		FromLocationID   int             `json:"fromLocationId"   gorm:"type:int;not null;comment:婧愪綅缃甶d"`         //婧愪綅缃甶d
+		FromLocation     Location        `json:"fromLocation"     gorm:"foreignKey:FromLocationID;references:Id"` //婧愪綅缃�
+		ToLocationID     int             `json:"toLocationId"    gorm:"type:int;not null;comment:鐩爣浣嶇疆id"`         //鐩爣浣嶇疆id
+		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
 	}
 )
 
@@ -54,8 +73,8 @@
 	return slf
 }
 
-func (slf *OperationDetailsSearch) SetID(id uint) *OperationDetailsSearch {
-	slf.ID = id
+func (slf *OperationDetailsSearch) SetID(ID int) *OperationDetailsSearch {
+	slf.Id = ID
 	return slf
 }
 
@@ -70,15 +89,35 @@
 }
 
 func (slf *OperationDetailsSearch) SetOperationId(operationId int) *OperationDetailsSearch {
-	slf.OperationId = operationId
+	slf.OperationID = operationId
+	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
 }
 
 func (slf *OperationDetailsSearch) build() *gorm.DB {
 	var db = slf.Orm.Model(&OperationDetails{})
 
-	if slf.ID != 0 {
-		db = db.Where("id = ?", slf.ID)
+	if slf.Id != 0 {
+		db = db.Where("id = ?", slf.Id)
 	}
 
 	if slf.Order != "" {
@@ -89,8 +128,26 @@
 		db = db.Where("product_name like ?", fmt.Sprintf("%%%v%%", slf.Keyword))
 	}
 
-	if slf.OperationId != 0 {
-		db = db.Where("operation_id = ?", slf.OperationId)
+	if slf.OperationID != 0 {
+		db = db.Where("operation_id = ?", slf.OperationID)
+	}
+	if slf.ProductId != "" {
+		db = db.Where("product_id = ?", slf.ProductId)
+	}
+	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
@@ -154,7 +211,7 @@
 
 func (slf *OperationDetailsSearch) Delete() error {
 	var db = slf.build()
-	return db.Delete(&OperationDetails{}).Error
+	return db.Unscoped().Delete(&OperationDetails{}).Error
 }
 
 func (slf *OperationDetailsSearch) First() (*OperationDetails, error) {
@@ -256,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
+}

--
Gitblit v1.8.0