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