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 ++++++++++++++++++++--------
service/more_units.go | 31 ++++++++++-----
2 files changed, 62 insertions(+), 26 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)
}
diff --git a/service/more_units.go b/service/more_units.go
index b141c17..f4bfe42 100644
--- a/service/more_units.go
+++ b/service/more_units.go
@@ -24,18 +24,29 @@
}
func AddMoreUnit(units []models.UnitItems, units2 []models.UnitItems) []models.UnitItems {
- moreValueArr := make([]models.UnitItems, 0, len(units))
- for _, unitItem1 := range units {
- for _, unitItem2 := range units2 {
- if unitItem1.Unit == unitItem2.Unit {
- moreValueArr = append(moreValueArr, models.UnitItems{
- Amount: unitItem1.Amount.Add(unitItem2.Amount),
- Unit: unitItem1.Unit,
- Floating: unitItem1.Floating,
- })
- }
+ unitMap := make(map[string]models.UnitItems)
+
+ // 灏� units 涓殑鎵�鏈夊厓绱犳坊鍔犲埌 map 涓�
+ for _, unitItem := range units {
+ unitMap[unitItem.Unit] = unitItem
+ }
+
+ // 閬嶅巻 units2锛屽悎骞剁浉鍚屽崟浣嶇殑鏁伴噺锛屽苟灏� units2 涓笉瀛樺湪浜� units 涓殑鍗曚綅娣诲姞鍒� map 涓�
+ for _, unitItem2 := range units2 {
+ if unitItem1, exists := unitMap[unitItem2.Unit]; exists {
+ unitItem1.Amount = unitItem1.Amount.Add(unitItem2.Amount)
+ unitMap[unitItem2.Unit] = unitItem1
+ } else {
+ unitMap[unitItem2.Unit] = unitItem2
}
}
+
+ // 灏� map 杞崲鍥� slice
+ moreValueArr := make([]models.UnitItems, 0, len(unitMap))
+ for _, unitItem := range unitMap {
+ moreValueArr = append(moreValueArr, unitItem)
+ }
+
return moreValueArr
}
--
Gitblit v1.8.0