From 35d641adccfd2aa2bcd0090415ff7fdb18e9773d Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期四, 01 八月 2024 14:40:56 +0800 Subject: [PATCH] 库存报表多单位数据查询修正 --- service/inventory_report_forms.go | 57 +++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 41 insertions(+), 16 deletions(-) diff --git a/service/inventory_report_forms.go b/service/inventory_report_forms.go index eac7252..6623aea 100644 --- a/service/inventory_report_forms.go +++ b/service/inventory_report_forms.go @@ -1,6 +1,7 @@ package service import ( + "encoding/json" "fmt" "github.com/shopspring/decimal" "github.com/xuri/excelize/v2" @@ -13,10 +14,11 @@ ) type Detail struct { - ProductId string `json:"productId"` - Amount decimal.Decimal `json:"amount"` - Status constvar.OperationStatus `json:"status"` - //ProductName string `json:"productName"` + ProductId string `json:"productId"` + Amount decimal.Decimal `json:"amount"` + Status constvar.OperationStatus `json:"status"` + MoreUnitValue string `json:"-" gorm:"type:varchar(255);comment:澶氬崟浣嶅��"` + MoreUnitList []models.UnitItems `json:"moreUnitList" gorm:"-"` } type InventoryReportFormsService struct{} @@ -55,12 +57,12 @@ var inHouse []Detail var outHouse []Detail dbIn := models.NewOperationDetailsSearch().Orm.Model(&models.OperationDetails{}). - Select("wms_operation_details.product_id,wms_operation_details.amount,wms_operation.status as status"). + Select("wms_operation_details.product_id,wms_operation_details.amount,wms_operation.status as status, more_unit_value"). Joins("left join wms_operation ON wms_operation_details.operation_id=wms_operation.id"). Where("wms_operation.base_operation_type in (?)", []constvar.BaseOperationType{constvar.BaseOperationTypeIncoming, constvar.BaseOperationTypeInternal}). Where("wms_operation.status in (?)", []constvar.OperationStatus{constvar.OperationStatus_Finish}) dbOut := models.NewOperationDetailsSearch().Orm.Model(&models.OperationDetails{}). - Select("wms_operation_details.product_id,wms_operation_details.amount,wms_operation.status as status"). + Select("wms_operation_details.product_id,wms_operation_details.amount,wms_operation.status as status, more_unit_value"). Joins("left join wms_operation ON wms_operation_details.operation_id=wms_operation.id"). Where("wms_operation.base_operation_type in (?)", []constvar.BaseOperationType{constvar.BaseOperationTypeOutgoing, constvar.BaseOperationTypeInternal, constvar.BaseOperationTypeDisuse}). Where("wms_operation.status in (?)", []constvar.OperationStatus{constvar.OperationStatus_Ready, constvar.OperationStatus_Finish}) @@ -76,10 +78,34 @@ if err != nil { return } + + for _, in := range inHouse { + var arr []models.UnitItems + if len(in.MoreUnitValue) != 0 { + err := json.Unmarshal([]byte(in.MoreUnitValue), &arr) + if err != nil { + return nil, err + } + in.MoreUnitList = arr + } + } + err = dbOut.Find(&outHouse).Error if err != nil { return } + + for _, out := range outHouse { + var arr []models.UnitItems + if len(out.MoreUnitValue) != 0 { + err := json.Unmarshal([]byte(out.MoreUnitValue), &arr) + if err != nil { + return nil, err + } + out.MoreUnitList = arr + } + } + for _, material := range materials { data := new(response.InventoryForms) data.ProduceId = material.ID @@ -93,31 +119,30 @@ for _, amount := range productAmounts { if material.ID == amount.ProductId { data.Amount = data.Amount.Add(amount.Amount) + data.AmountMoreUnits = AddMoreUnit(data.AmountMoreUnits, amount.MoreUnitList) } } for _, details := range inHouse { if material.ID == details.ProductId { data.In = data.In.Add(details.Amount) + data.InMoreUnits = AddMoreUnit(data.InMoreUnits, details.MoreUnitList) } } - available := decimal.NewFromInt(0) + readyOutAmount := decimal.NewFromInt(0) + readyOutAmountMoreUnitList := make([]models.UnitItems, 0) for _, details := range outHouse { if material.ID == details.ProductId { if details.Status == constvar.OperationStatus_Ready { - available = available.Add(details.Amount) + readyOutAmount = readyOutAmount.Add(details.Amount) + readyOutAmountMoreUnitList = AddMoreUnit(readyOutAmountMoreUnitList, details.MoreUnitList) } else { data.Out = data.Out.Add(details.Amount) + data.OutMoreUnits = AddMoreUnit(data.OutMoreUnits, details.MoreUnitList) } } } - data.AvailableNumber = data.Amount.Sub(available) - - if *material.MoreUnit { - data.AmountMoreUnits = CreateMoreUnit(data.Amount, material.MoreUnitList) - data.AvailableNumberMoreUnits = CreateMoreUnit(data.AvailableNumber, material.MoreUnitList) - data.InMoreUnits = CreateMoreUnit(data.In, material.MoreUnitList) - data.OutMoreUnits = CreateMoreUnit(data.Out, material.MoreUnitList) - } + data.AvailableNumber = data.Amount.Sub(readyOutAmount) //鍙敤鏁伴噺绛変簬搴撳瓨鏁伴噺鍑忓緟鍑哄簱鏁伴噺 + data.AvailableNumberMoreUnits = SubMoreUnit(data.AmountMoreUnits, readyOutAmountMoreUnitList) //鍙敤澶氬崟浣嶇瓑浜庡墿浣欐暟閲忓噺寰呭嚭搴撴暟閲� result = append(result, data) } -- Gitblit v1.8.0