From 1572f45e72cc0fa15c029f9ee2a08474104435e6 Mon Sep 17 00:00:00 2001
From: selfcheer <selfcheer@gmail.com>
Date: 星期五, 19 七月 2024 00:48:43 +0800
Subject: [PATCH] 采购单产品列表去掉过滤重复产品的逻辑

---
 api/v1/purchase/purchase.go |  144 ++++++++++++++++++++++++++++-------------------
 1 files changed, 85 insertions(+), 59 deletions(-)

diff --git a/api/v1/purchase/purchase.go b/api/v1/purchase/purchase.go
index e571258..398c153 100644
--- a/api/v1/purchase/purchase.go
+++ b/api/v1/purchase/purchase.go
@@ -10,6 +10,7 @@
 	"srm/model/common/response"
 	"srm/model/purchase"
 	purchaserequest "srm/model/purchase/request"
+	"srm/proto/common"
 	"srm/proto/purchase_wms"
 	"strconv"
 	"strings"
@@ -238,13 +239,13 @@
 		return
 	}
 	warehouse := ""
+	data, err := service.NewPurchaseService().GetPurchase(uint(params.Id))
+	if err != nil {
+		global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+		response.FailWithMessage("鑾峰彇澶辫触", c)
+		return
+	}
 	if params.Status == purchase.OrderStatusReceived {
-		data, err := service.NewPurchaseService().GetPurchase(uint(params.Id))
-		if err != nil {
-			global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
-			response.FailWithMessage("鑾峰彇澶辫触", c)
-			return
-		}
 		productList, err := service.NewPurchaseService().GetPurchaseProductList(uint(params.Id))
 		if err != nil {
 			global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
@@ -260,11 +261,12 @@
 		}
 		client := purchase_wms.NewPurchaseServiceClient(purchase_wms.PurchaseConn)
 		resp, err := client.PurchaseToWms(context.Background(), &purchase_wms.PurchaseToWmsRequest{
-			Number:          data.Number,
-			SupplierName:    data.Supplier.Name,
-			Product:         product,
-			Source:          "SRM_PURCHASE",
-			OperationSource: purchase_wms.OperationSource_OperationSourcePurchase,
+			Number:             data.Number,
+			SupplierName:       data.Supplier.Name,
+			Product:            product,
+			Source:             "SRM_PURCHASE",
+			OperationSource:    common.OperationSource_OperationSourcePurchase,
+			SalesDetailsNumber: data.SourceOrder,
 		})
 		if err != nil {
 			global.GVA_LOG.Error("grpc璋冪敤澶辫触!", zap.Error(err))
@@ -394,59 +396,77 @@
 		return
 	}
 
-	operationInfos := make([]purchaseRes.OperationInfo, 0)
+	var operationInfos purchaseRes.OperationInfo
+	productInfos := make([]purchaseRes.ProductInfo, 0)
+	inWarehouseInfos := make([]purchaseRes.InWarehouseInfo, 0)
+	//productMap := make(map[string]*purchaseRes.ProductInfo)
 	if len(info.Operations) > 0 {
 		for _, operation := range info.Operations {
-			var oi purchaseRes.OperationInfo
-			oi.Number = operation.ProductId
-			oi.Name = operation.ProductName
-			oi.OperationNumber = operation.Number
-			oi.Status = operation.Status
-			oi.Principal = data.Principal
-			oi.WarehouseName = data.Warehouse
-			if operation.OverTime != "" {
-				oi.OverTime = operation.OverTime
-				oi.OverAmount = operation.Amount
+			var pi purchaseRes.ProductInfo
+			var iwi purchaseRes.InWarehouseInfo
+			//if p, ok := productMap[operation.ProductId]; ok {
+			//	pi = *p
+			//}
+			pi.Number = operation.ProductId
+			pi.Name = operation.ProductName
+			iwi.Number = operation.ProductId
+			iwi.Name = operation.ProductName
+			iwi.OperationNumber = operation.Number
+			iwi.Status = operation.Status
+			iwi.Principal = data.Principal
+			iwi.WarehouseName = data.Warehouse
+			if operation.OverTime != "" && operation.Status == 4 {
+				iwi.OverTime = operation.OverTime
+				iwi.OverAmount = operation.Amount
+				pi.OverAmount = pi.OverAmount + operation.Amount
 			}
 			for _, products := range productList {
 				if products.Product.Number == operation.ProductId {
-					oi.Amount = products.Amount
-					oi.PurchasePrice = products.Price
-					oi.Total = products.Total
-					oi.Unit = products.Product.Unit
-					oi.Specifications = products.Product.Specifications
-					oi.ModelNumber = products.Product.ModelNumber
+					pi.Amount = products.Amount
+					pi.PurchasePrice = products.Price
+					pi.Total = products.Total
+					pi.Unit = products.Product.Unit
+					pi.Specifications = products.Product.Specifications
+					pi.ModelNumber = products.Product.ModelNumber
 					break
 				}
 			}
 			for _, confirm := range confirmInfo {
 				if operation.ProductId == confirm.ProductId {
-					oi.SendAmount = confirm.OverReceiveAmount.IntPart()
+					pi.SendAmount = confirm.OverReceiveAmount.IntPart()
 					break
 				}
 			}
-			operationInfos = append(operationInfos, oi)
+			inWarehouseInfos = append(inWarehouseInfos, iwi)
+			//productMap[operation.ProductId] = &pi
+			productInfos = append(productInfos, pi)
 		}
 	} else {
 		for _, products := range productList {
-			var oi purchaseRes.OperationInfo
-			oi.Number = products.Product.Number
-			oi.Name = products.Product.Name
-			oi.Amount = products.Amount
-			oi.PurchasePrice = products.Price
-			oi.Total = products.Total
-			oi.Unit = products.Product.Unit
-			oi.Specifications = products.Product.Specifications
-			oi.ModelNumber = products.Product.ModelNumber
+			var pi purchaseRes.ProductInfo
+			pi.Number = products.Product.Number
+			pi.Name = products.Product.Name
+			pi.Amount = products.Amount
+			pi.PurchasePrice = products.Price
+			pi.Total = products.Total
+			pi.Unit = products.Product.Unit
+			pi.Specifications = products.Product.Specifications
+			pi.ModelNumber = products.Product.ModelNumber
 			for _, confirm := range confirmInfo {
 				if products.Product.Number == confirm.ProductId {
-					oi.SendAmount = confirm.OverReceiveAmount.IntPart()
+					pi.SendAmount = confirm.OverReceiveAmount.IntPart()
 					break
 				}
 			}
-			operationInfos = append(operationInfos, oi)
+			//productMap[pi.Number] = &pi
+			productInfos = append(productInfos, pi)
 		}
 	}
+	//for _, productInfo := range productMap {
+	//	productInfos = append(productInfos, *productInfo)
+	//}
+	operationInfos.InWarehouseInfos = inWarehouseInfos
+	operationInfos.ProductInfos = productInfos
 
 	response.OkWithData(operationInfos, c)
 }
@@ -665,13 +685,14 @@
 		}
 		client := purchase_wms.NewPurchaseServiceClient(purchase_wms.PurchaseConn)
 		_, err = client.PurchaseToWms(context.Background(), &purchase_wms.PurchaseToWmsRequest{
-			Number:          purchaseData.Number,
-			SupplierName:    purchaseData.Supplier.Name,
-			SupplierId:      int64(purchaseData.SupplierId),
-			Product:         product,
-			Source:          "SRM_PURCHASE",
-			WarehouseName:   purchaseData.Warehouse,
-			OperationSource: purchase_wms.OperationSource_OperationSourcePurchase,
+			Number:             purchaseData.Number,
+			SupplierName:       purchaseData.Supplier.Name,
+			SupplierId:         int64(purchaseData.SupplierId),
+			Product:            product,
+			Source:             "SRM_PURCHASE",
+			WarehouseName:      purchaseData.Warehouse,
+			OperationSource:    common.OperationSource_OperationSourcePurchase,
+			SalesDetailsNumber: purchaseData.SourceOrder,
 		})
 		if err != nil {
 			global.GVA_LOG.Error("grpc璋冪敤澶辫触!", zap.Error(err))
@@ -739,22 +760,27 @@
 	}
 	product := make([]*purchase_wms.PurchaseProduct, 0)
 	ids := make([]int, 0)
+	productMap := make(map[string]int64)
 	for _, inspection := range inspectionList {
-		var p purchase_wms.PurchaseProduct
-		p.Id = inspection.ProductId
-		p.Amount = inspection.Amount.IntPart()
-		product = append(product, &p)
+		productMap[inspection.ProductId] = inspection.Amount.IntPart()
 		ids = append(ids, int(inspection.ID))
+	}
+	for k, v := range productMap {
+		var p purchase_wms.PurchaseProduct
+		p.Id = k
+		p.Amount = v
+		product = append(product, &p)
 	}
 	client := purchase_wms.NewPurchaseServiceClient(purchase_wms.PurchaseConn)
 	_, err = client.PurchaseToWms(context.Background(), &purchase_wms.PurchaseToWmsRequest{
-		Number:          purchaseData.Number,
-		SupplierName:    purchaseData.Supplier.Name,
-		SupplierId:      int64(purchaseData.SupplierId),
-		Product:         product,
-		Source:          "SRM_PURCHASE",
-		WarehouseName:   purchaseData.Warehouse,
-		OperationSource: purchase_wms.OperationSource_OperationSourcePurchase,
+		Number:             purchaseData.Number,
+		SupplierName:       purchaseData.Supplier.Name,
+		SupplierId:         int64(purchaseData.SupplierId),
+		Product:            product,
+		Source:             "SRM_PURCHASE",
+		WarehouseName:      purchaseData.Warehouse,
+		OperationSource:    common.OperationSource_OperationSourcePurchase,
+		SalesDetailsNumber: purchaseData.SourceOrder,
 	})
 	if err != nil {
 		global.GVA_LOG.Error("grpc璋冪敤澶辫触!", zap.Error(err))

--
Gitblit v1.8.0